关于linux c程序调用c++库的问题!

xuexingyang 2011-01-24 01:42:22
首先声明:
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. 如何操作可以实现这种调用?

非常感谢!!!!!

...全文
209 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuexingyang 2011-01-26
  • 打赏
  • 举报
回复
总结:

总算完成了,谢谢各位了。
谢谢海燕!!
xuexingyang 2011-01-24
  • 打赏
  • 举报
回复
为什么有这么多答案,并且有繁有简,唉,只有自己一个个试试了。
谢谢了,各位!!
谭海燕 2011-01-24
  • 打赏
  • 举报
回复
C调用C++库的时候。使用

extern {

#include <库头文件>

}

这样就可以了。
wangtingguang 2011-01-24
  • 打赏
  • 举报
回复
ldd -r ibmid.so 看看
Myth_cn 2011-01-24
  • 打赏
  • 举报
回复
引用下别人的博客,版权归原作者所有http://hi.baidu.com/b_a_i_du/blog/item/aaee9dfc60090afefd037fa3.html
justkk 2011-01-24
  • 打赏
  • 举报
回复
把你的c程序同样用g++编译,应该就可以了

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧