1 / 2
文档名称:

undefined-reference-to-error解决方法.pdf

格式:pdf   大小:134KB   页数:2页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

undefined-reference-to-error解决方法.pdf

上传人:文库旗舰店 2022/5/10 文件大小:134 KB

下载得到文件列表

undefined-reference-to-error解决方法.pdf

文档介绍

文档介绍:undefined reference to error 解决方法

Linux 下编译程序时,经常会遇到“undefined reference error” 报错,

这里总结一些可能的原因和解决方案,给需undefined reference to error 解决方法

Linux 下编译程序时,经常会遇到“undefined reference error” 报错,

这里总结一些可能的原因和解决方案,给需要的朋友:

说道 undefined reference error,先提一下 Linux gcc 链接规则:

链接的时候查找顺序是:

-L 指定的路径, 从左到右依次查找
由 环境变量 LIBRARY_PATH 指定的路径,使用":"分割从左到右依次查找
/etc/ 指定的路径顺序
/lib 和 /usr/lib (64 位下是/lib64 和/usr/lib64)
动态库调用的查找顺序:

ld 的-rpath 参数指定的路径, 这是写死在代码中的
ld 脚本指定的路径
LD_LIBRARY_PATH 指定的路径
/etc/ 指定的路径
/lib 和/usr/lib(64 位下是/lib64 和/usr/lib64)
一般情况链接的时候我们采用-L 的方式指定查找路径, 调用动态链接库的时候采用
LD_LIBRARY_PATH 的方式指定链接路径.

另外注意一个问题,就是只要查找到第一个就会返回,后面的不会再查找. 比如-L./A -L./B -lx
在 A 中有 B 中有 和 , 这个时候会使用在./A 的 而不会遵循动态库
优先的原则,因为./A 是先找到的,并且没有同名动态库存在

对于动态链接库,实际的符号定位是在运行期进行的. 的时候,如果没有把它需
要的库和他一起进行联编,比如 需要使用 uldict, 但是忘记在编译 的时候加
上-luldict 的话,在编译 的时候不会报错,因为这个时候 被认为是一个库,它
里面存在一些不知道具体实现的符号是合法的,是可以在运行期指定或者编译另外的二进制
程序的时候指定.

如果是采用 g++ -Lpath -lx 的方式进行编译,链接器会发现所需要的 uldict 的符号表找不
到从而报错,但是如果是程序采用 dlopen 的方式载入,由于是运行期,这个程序在这个地
方就直