[转]gcc连接静态库成功,g++连接静态库不成功

原文链接:http://xiaomage.blog.51cto.com/293990/72755
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"
}
 
这样就可以连接通过啦。


转载于:https://www.cnblogs.com/zjfdlut/archive/2011/05/30/2062978.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值