我不明白。我通常安装第三方软件/usr/本地因此库被安装到 /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/包括发现没有添加-I/usr/local/include
.
我正在使用 Debian GNU/Linux 6 (Squeeze),其中有一个条目/usr/local/lib in /etc/ld.so.conf.d/libc.conf默认情况下,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 脚本完成),或者您安装了二进制文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)