我不明白.我通常将第三方软件安装到/ usr/local中,因此库安装在/ usr/local/lib中,并且从未遇到过链接到这些库的问题.但现在它突然不再有效:
$ gcc -lkaytils -o test test.c /usr/bin/ld.gold.real: error: cannot find -lkaytils /usr/bin/ld.gold.real: /tmp/ccXwCkYk.o: in function main:test.c(.text+0x15): error: undefined reference to 'strCreate' collect2: ld returned 1 exit status
当我添加参数而-L/usr/local/lib
不是它的工作但我从来没有必须使用它.找到/ usr/local/include中的头文件而不添加-I/usr/local/include
.
我正在使用Debian GNU/Linux 6(Squeeze),默认情况下在/etc/ld.so.conf.d/libc.conf中有/ usr/local/lib条目,ldconfig缓存知道库我是试图使用:
k@vincent:~$ ldconfig -p | grep kaytils libkaytils.so.0 (libc6,x86-64) => /usr/local/lib/libkaytils.so.0 libkaytils.so (libc6,x86-64) => /usr/local/lib/libkaytils.so
那么到底是怎么回事?我在哪里可以检查默认情况下通过gcc搜索哪些库路径?也许那里出了点问题.
gcc -print-search-dirs将告诉您编译器检查的路径./ usr/local/lib根本就不在其中,所以你的编译时链接器(在这种情况下是来自binutils的新黄金ld)在动态的时候找不到库(ld-linux.so读取由ldconfig).据推测,您之前已经完成的构建在其makefile中添加了-L/usr/local/lib(通常由./configure脚本完成),或者您安装了二进制文件.