当前位置: 技术问答>linux和unix
关于linux c程序调用c++库的问题!
来源: 互联网 发布时间:2016-11-06
本文导语: 首先声明: 1. 是linux下的编程。 2. 涉及到c和c++的开发。 3. 这里的库是动态库或者是静态库。 问题: 已有一个通过automake(里面用到libtool等工具生成Makefile)生成的工程,并且运行良好。 现在需要将第三方的c++...
首先声明:
1. 是linux下的编程。
2. 涉及到c和c++的开发。
3. 这里的库是动态库或者是静态库。
问题:
已有一个通过automake(里面用到libtool等工具生成Makefile)生成的工程,并且运行良好。
现在需要将第三方的c++库(静态库和动态库都有)集成到原有的工程中去,核心问题就是c调用c++的库。
研究过程和问题:
1.有人告诉说只要在c++的代码中将需要的函数extern “C”出来,c就可以调用了,但是觉得说者比较笼统,没有实现出来。
2. 参看如下blog中的实例:http://www.cppblog.com/wolf/articles/77828.html (4.C调用C++库:部分)。也就是将c++库做一个二次封装,然后c再调用。比如说我的c++库(仿照例子生成动态库,静态库调用还没有研究)叫libaaa.so,里面有func1和func2是c将要调用的,中间库叫libmid.so,c测试程序叫testdemo.c. 在生成c++库和中间库,都没有问题,但是生成最终程序的时候说报错如下:
/lib/libmid.so: undefined reference to `func1(char*, char*, char*, char*)'
/lib/libmid.so: undefined reference to `func2(char*, char*, char*, char*, char*, char*, char*, char*, char*, char*)'
collect2: ld returned 1 exit status
请教:
1. 请教有这方面经验的兄弟给个建议,为什么会报错如上描述。
2. c程序调用c++库的方法怎么算比较好,结合我的工程实例。
3. 如何操作可以实现这种调用?
非常感谢!!!!!
1. 是linux下的编程。
2. 涉及到c和c++的开发。
3. 这里的库是动态库或者是静态库。
问题:
已有一个通过automake(里面用到libtool等工具生成Makefile)生成的工程,并且运行良好。
现在需要将第三方的c++库(静态库和动态库都有)集成到原有的工程中去,核心问题就是c调用c++的库。
研究过程和问题:
1.有人告诉说只要在c++的代码中将需要的函数extern “C”出来,c就可以调用了,但是觉得说者比较笼统,没有实现出来。
2. 参看如下blog中的实例:http://www.cppblog.com/wolf/articles/77828.html (4.C调用C++库:部分)。也就是将c++库做一个二次封装,然后c再调用。比如说我的c++库(仿照例子生成动态库,静态库调用还没有研究)叫libaaa.so,里面有func1和func2是c将要调用的,中间库叫libmid.so,c测试程序叫testdemo.c. 在生成c++库和中间库,都没有问题,但是生成最终程序的时候说报错如下:
/lib/libmid.so: undefined reference to `func1(char*, char*, char*, char*)'
/lib/libmid.so: undefined reference to `func2(char*, char*, char*, char*, char*, char*, char*, char*, char*, char*)'
collect2: ld returned 1 exit status
请教:
1. 请教有这方面经验的兄弟给个建议,为什么会报错如上描述。
2. c程序调用c++库的方法怎么算比较好,结合我的工程实例。
3. 如何操作可以实现这种调用?
非常感谢!!!!!
|
C调用C++库的时候。使用
extern {
#include
}
这样就可以了。
extern {
#include
}
这样就可以了。
|
把你的c程序同样用g++编译,应该就可以了
|
引用下别人的博客,版权归原作者所有http://hi.baidu.com/b_a_i_du/blog/item/aaee9dfc60090afefd037fa3.html
|
ldd -r ibmid.so 看看