c -/usr/local/lib 中的共享库未找到

标签 c linux gcc debian

我不明白。我通常将第三方软件安装到 /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 中有一个用于 /usr/local/lib 的条目。 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 脚本完成),或者您安装了二进制文件。

关于c -/usr/local/lib 中的共享库未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5873516/

相关文章:

c - 如何将字符串保存在动态二维数组中?

c++ - 如何从 256 位消息中获取特定位?

c - 警告 : no previous prototype for 'format_SaNameT'

c - 如何将 ANSI-C 从 unsigned int * 转换为 char *?

c++ - 我的 g++ 使用 vector<weak_ptr> erase() 方法生成奇怪的警告

Linux命令检查zip文件层次结构

linux - bash: && 运算符行为

regex - 使用 sed 添加空格

C:优化导致SDL_QUIT为真?

linux - 使用os161 mips编译的gdb-7.8的链接错误