在linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息:
/usr/bin/ld: cannot find -lxxx
这些讯息会随着编译不同类型的source code 而有不同的结果出来如:
/usr/bin/ld: cannot find -lc
/usr/bin/ld: cannot find -lltdl
/usr/bin/ld: cannot find -lXtst
其中xxx即表示函式库文件名称,如上例的:libc.so、libltdl.so、libXtst.so。
其命名规则是:lib+库名(即xxx)+.so。
会发生这样的原因有以下三种情形:
1 系统没有安装相对应的lib
2 相对应的lib版本不对
3 lib(.so档)的symbolic link 不正确,没有连结到正确的函式库文件(.so)
如果在/usr/lib的目录下找不到libXtst.so 档,那么就表示系统没有安装libXtst的函式库。
解法如下:
apt-get install libxtst-dev
解决/usr/lib/ld: cannot find -lc:
1. 在系统中搜索 libc.so 文件。搜索出一个无效的链接,删除;还有一个
libc.so.6 ,在/usr/lib/i386-linux-gnu下面。
2. 进入usr/lib目录:cd
/usr/lib
3.建立链接:sudo ln -sv /lib/i386-linux-gnu/libc.so.6
libc.so
解决/usr/lib/ld: cannot find -lm:
1. 在系统中搜索 libm.so 文件。搜索出一个 libm.so
,在/usr/lib/i386-linux-gnu下面。
2. 进入usr/lib目录:cd /usr/lib
3.建立链接:sudo
ln -sv /usr/lib/i386-linux-gnu/libm.so libm.so
但是深究该问题应该是该库的头文件库没有安装所致:
[[email protected] lib]# yum list all | grep ltdl libtool-ltdl.i386 1.5.22-7.el5_4 installed libtool-ltdl-devel.i386 1.5.22-7.el5_4 CentOs5.5-32
安装头文件:
[[email protected] lib]# yum -y install libtool-ltdl-devel.i386
。。。
查看后发现该错误确实是由devel头文件未安装所致。
[[email protected] lib]# rpm -ql libtool-ltdl-devel.i386 /usr/include/ltdl.h /usr/lib/libltdl.a /usr/lib/libltdl.la /usr/lib/libltdl.so
编译找不到库文件