Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29347
  • 博文数量: 24
  • 博客积分: 717
  • 博客等级: 上士
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-27 12:08
文章分类

全部博文(24)

文章存档

2011年(23)

2010年(1)

我的朋友

分类: LINUX

2010-06-27 12:15:08

-
linux下用g++编译代码,在连接一个c的静态库的时候,总是提示: undefined reference to`错误,找不到库函数。
 
main.c:(.text+0x15): undefined reference to `MemoryContextInit()'
main.c:(.text+0x26): undefined reference to `MemoryContextDestory()'
 
用gcc编译就可以通过。
 
其实,代码不是面向对象的c++语言,开始没有想到是c++调用c函数的问题。
开始是以为库的路径不对;make文件中库的顺序不对;等等方法,都没有效果。
百试不得出路之后,才发现是extern “C”的问题。
 
用g++编译c的库函数,没有问题,可以生成目标文件.o,但是c++的命名机制已经将调用的库函数改名称了。
说以必须在c库函数前加上 extern “C”。
 
如果一个一个函数转换,是可行的
extern “C” MemoryContextInit()
但是为了能够一次完全转换,采用将整个库的头文件引用改为如下方式:
extern "C"
{
#include "../lib/libxxx.h"
}
 
这样就可以连接通过啦。
转:http://dev.firnow.com/course/3_program/cshapo/csharpjs/20100118/191881.html
我是用的动态库,也遇到了类似的问题,按照上面的方法解决了。
阅读(1287) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~