g++如何链接gcc生成的静态库文件

赏叶7vn44狥
2012-11-19 · 超过11用户采纳过TA的回答
知道答主
回答量:86
采纳率:100%
帮助的人:5.4万
展开全部
g++直接链接gcc生成的静态库文件,会出现以下错误:
[search@SY-0187 test]$ g++ test.cpp -o test -L. -lmyhelloc
/tmp/cc83gjbt.o: In function `main':
test.c:(.text+0x5): undefined reference to `hello()'
collect2: ld returned 1 exit status
找不到静态库中的函数,原因是:
c++的函数名的生成和c的函数名的生成不同,在c中只根据函数名和调用约定、c++还要加上参数类型列表,所以c++编译器无法找到函数。
解决办法:只要用extern “C” 告诉编译器使用c语言的函数名字修饰技术就可以了。
解决方法:
1.在cpp文件的include处,对c库函数前加上 extern “C”extern C{#include ../lib/libxxx.h}不推荐,原因是会出现以下错误:
[search@SY-0187 test]$ g++ -g get_value.cpp -o get_value -I./include -L./lib -lMymemcached -lmemcached
/usr/local/include/libmemcached/options.h:69: error: declaration of C function 'memcached_return_t memcached_parse_configure_file(memcached_st*, memcached_array_st*)' conflicts with
/usr/local/include/libmemcached/options.h:66: error: previous declaration 'memcached_return_t memcached_parse_configure_file(memcached_st*, const char*, size_t)' here
不能识别重载的函数。
2.对.a include
的头文件进行修改。
#ifdef __cplusplusextern C{#endif原先的.a的库函数的声明
#ifdef __cplusplus}#endif推荐使用这种方式
标准的C的头文件形式是:
#ifndef __INCvxWorksh
#define __INCvxWorksh
#ifdef __cplusplusextern C {#endif/*...*/#ifdef __cplusplus}#endif#endif /* __INCvxWorksh */
具体的extern “C”的作用见
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式