CMake 包含了头文件 找到了so动态库 链接时仍然出现undefined reference to 错误
来源:互联网 发布:python 发送html邮件 编辑:程序博客网 时间:2024/05/21 10:42
今天遇到一个CMake 链接问题,这里提出来和大家分享:
问题:
自己用C语言写了一个动态:libword-counter.so,公开头文件word-counter.h, 其中有函数如:wc_get_word_freq()
自己用C++语言写了一个测试工程,在main函数中调用上述库函数wc_get_word_freq。
结果出现undefined reference to 的错误
分析:
1. 根据Cmake的编译log,可以看出该错误是在linking target的时候出现的,因此build是OK的
2. 如果修改头文件为其他文件,则出现找不到文件的错误,因此说明头文件可以正常找到。也在次说明1中build是没问题的
3. 编译选项我已经指明了需要加载的库 -lword-counter
4. 如果修改3中的库名,则出现找不到so的错误,说明3中编译选项是没问题的,系统能找到这个库so
5. 现在出现问题“undefined reference to 的错误”,太诡异了?
6. 本人一直坚信,计算机不会出现灵异事件,因此不断请教度娘
7. 发现有人建议我用nm命令查看so的符号表,看看这个函数是否正常,于是nm -D 库文件,查看了下,结果函数正常的。
8. 最后想到C++调用C存在混编问题,有人建议编译选项加上 -lstdc++,结果还是不行
9. 最终沿着混编问题走下去,我找到了原因,需要在库文件的头文件中加上下面的语句,用以指定,在编译C++的时候被调用的代码仍然使用C编译选项。
#ifdef __cplusplusextern "C"{#endif
问题解决,希望遇到问题的小伙伴能看到,少走弯路~~
0 0
- CMake 包含了头文件 找到了so动态库 链接时仍然出现undefined reference to 错误
- C++ 使用动态链接库xx.so 时出现undefined reference错误
- eclipse里调用接口库时出现了错误 Undefined reference to
- undefined reference to `__gnu_mcount_nc'的解决 在编译内核时出现了如下错误:
- CodeBlocks链接时报未找到错误 undefined reference to
- 对于动态数据库链接出现undefined reference to `dlclose' 的错误
- undefined reference to 链接错误
- 使用g++编译C/C++程序,链接时出现undefined reference to错误
- 链接库时的“undefined reference to”
- 动态链接时出现undefined symbol错误
- linux 链接库文件出现“undefined reference to" 问题的解决方法
- linux 链接库文件出现“undefined reference to" 问题的解决方法
- linux 链接库文件出现“undefined reference to" 问题的解决方法
- linux 链接库文件出现“undefined reference to" 问题的解决方法
- undefined reference to main,Eclipse生成动态链接库
- undefined reference to `clock_gettime' 链接错误问题解决
- undefined reference to `clock_gettime' 链接错误问题解决
- undefined reference to ceil 链接错误
- KindEditor修改图片上传
- 为什么说我们已经进入注意力经济时代
- iOS视图控制对象生命周期的区别
- iOS UITableView 便捷编写
- ScreenToWorldPoint
- CMake 包含了头文件 找到了so动态库 链接时仍然出现undefined reference to 错误
- java.lang.IllegalArgumentException: MALFORMED jar解析中文报错问题
- FIELD SYMBOL和TYPE REF TO的用法和比较
- handler发送和接受信息
- Java的接口与抽象类
- Grails 3.0连接Mysql数据库
- C语言struct内存占用问题
- Java笔记12:Java对象排序
- addImageAsync异步加载资源和进度条ProgressTimer的实现