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的头文件形式是:
device_init query_usrsum 这两个函数在哪个文件里?
库函数?
如果不是库函数而且不在main.c中的话,需要在编译的时候加上这两个函数所在的文件。
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....