为什么会出现如:error:undefined reference to ‘

 我来答
九月初生传奇
2016-09-05 · 超过47用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:58.2万
展开全部
Linux下编译程序时,经常会遇到“undefined reference to XXX” 报错,   这里总结一些可能的原因和解决方案,给需要的朋友:      说道undefined reference error,先提一下Linux gcc链接规则:      链接的时候查找顺序是:      -L 指定的路径, 从左到右依次查找   由 环境变量 LIBRARY_PATH 指定的路径,使用":"分割从左到右依次查找   /etc/ld.so.conf 指定的路径顺序   /lib 和 /usr/lib (64位下是/lib64和/usr/lib64)   动态库调用的查找顺序:      ld的-rpath参数指定的路径, 这是写死在代码中的   ld脚本指定的路径   LD_LIBRARY_PATH 指定的路径   /etc/ld.so.conf 指定的路径   /lib和/usr/lib(64位下是/lib64和/usr/lib64)   一般情况链接的时候我们采用-L的方式指定查找路径, 调用动态链接库的时候采用LD_LIBRARY_PATH的方式指定链接路径.   另外注意一个问题,就是只要查找到第一个就会返回,后面的不会再查找. 比如-L./A -L./B -lx 在A中有libx.a B中有libx.a和libx.so, 这个时候会使用在./A的libx.a 而不会遵循动态库优先的原则,因为./A是先找到的,并且没有同名动态库存在         对于动态链接库,实际的符号定位是在运行期进行的.在编译.so的时候,如果没有把它需要的库和他一起进行联编,比如libx.so 需要使用uldict, 但是忘记在编译libx.so的时候加上-luldict的话,在编译libx.so的时候不会报错,因为这个时候libx.so被认为是一个库,它里面存在一些不知道具体实现的符号是合法的,是可以在运行期指定或者编译另外的二进制程序的时候指定.   如果是采用 g++ -Lpath -lx 的方式进行编译,链接器会发现所需要的uldict的符号表找不到从而报错,但是如果是程序采用dlopen的方式载入,由于是运行期,这个程序在这个地方就直接运行报错了.另外还有一种情
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式