用C调用C++ .a静态库文件里的函数
比如把 int 数组排序:extern "c"
int
sort_int (int a[], int n)
{
sort (a, a+n);
}
这样编译成 .lib 后,就能调用 int sort_int (int*, int) 了。
c++ 函数用 extern "c" 修饰之后可以被 c 访问。
类方法应该是 c 无法访问的吧,嘿嘿 linux下用纯C的调用静态库.a可以吗?我的怎么不行?急!
我自己编译的c++的一个a.a静态库,我用纯c调用a.a不行,如果编译成动态的a.so用纯c可以调用。纯c的调用静态库.a可以吗?,怎么调用呀?是不是编译的时候要加什么宏,或是调用什么库?谢谢指教
网友回答:
网友:ropyn
给所有c运行时库的头文件加上extern "c"
如:
#include <iostream.h> //c++
...
extern "c"
{
#include <stdio.h> //c
....
}
网友:tiejun
在头文件中加上
ifdef __cplusplus
extern "c"
{
endif
............
............
ifdef __cplusplus
}
endif
网友:luoda
你同样需要指明链结参数
需要加增加 -l. -lfoo
网友:wwwunix
哎~~~~,简单问题:c语言不识别c++语法和函数呀.
网友:luoda
另外需要注意的是:-l. -lfoo的位置
gcc -o xxx -l. -ltest xxx.o 会报 undefined reference to "xxx"的错误
所以加在后面
gcc -o xxx xxx.o -l. -lfoo,如果你的.so和.a都在, 那么加 -static开关 经过我个人实践,我成功编译并用C调用C++ .a静态库文件的操作步骤如下:
1、给需要调用的函数头文件加上
#ifdef __cplusplus
extern "C"
{
#endif
头文件内容...........
#ifdef __cplusplus
}
#endif
2、编译c++的文件为.o文件
3、ar -r libcxx.a cxx.o 生成.a静态库文件
4、编译你的C程序,后面需要加上 -static -lstdc++
比如
gcc -o main main.c libpmp.a -static -lstdc++ -L/usr/lib -lm
看贴要回贴,在祝大家端午节快乐~
[size=2]看贴要回贴,在祝大家端午节快乐~[/size][size=1]<div style="display:block;overflow:hidden;width:1px;height:1px;">
[url=http://www.dadaji.cn][color=black]老虎機上分器[/color][/size][/url][color=black],[/color][url=http://www.dadaji.cn/sfq.htm][size=1][color=black]上分器[/color][/size][/url][color=black],[/color][url=http://www.dadaji.cn/lhj.htm][size=1][color=black]老虎機[/color][/size][/url][color=black],[/color][url=http://www.dadaji.cn/lhjykq.htm][size=1][color=black]老虎機遥控器[/color][/size][/url][url=http://www.dadaji.cn/lhjdwq.htm][size=1][color=black]老虎機定位器[/color][/url]</div>[/size]
页:
[1]