/usr/bin/ld: 找不到共享库

Posted

技术标签:

【中文标题】/usr/bin/ld: 找不到共享库【英文标题】:/usr/bin/ld: cannot find shared library 【发布时间】:2013-09-09 11:43:15 【问题描述】:

我在 /usr/local/lib 中有 libcommon.so,我正在我的程序中链接这个库。

gcc -o test test_prog.c -L/usr/local/lib -llibcommon.so

我也试过了

gcc -o test test_prog.c -L/usr/local/lib -llibcommon

它正在给予

/usr/bin/ld: 找不到 -llibcommon.so collect2: ld 返回 1 个退出状态

它就在那里:

$ locate libcommon.so
/usr/local/lib/libcommon.so
/usr/local/lib/libcommon.so.0
/usr/local/lib/libcommon.so.0.1.0
$

【问题讨论】:

可以查看here 【参考方案1】:

当您使用-l 时,您只需指定“基本”库名称:

-lcommon

这将在某个目录中追踪libcommon.so

您告诉编译器尝试查找liblibcommon.so.so(和liblibcommon.so),但它可能无法...确实,如果可以,您就不会问这个问题。

一些 GNU 程序构建了一个库 libiberty.so(或其等效项),因此使用该库的链接行链接为:

-liberty

(这很有趣;GNU 真的宁愿它是+liberty,但是......你不能解决所有问题)。

【讨论】:

我在根据你更改 /usr/local/lib /libcommon.so.0 后得到这个:无法读取符号:无效操作 collect2:ld 返回 1 个退出状态 现在你遇到了不同的问题。链接器找到了库,但无法理解其中的内容。我建议从运行file /usr/lib/libcommon.so /lib/libc.so 开始,并查看文件类型之间是否存在明显差异。您可能必须遵循符号链接(因此您可能必须在 file 命令行中指定不同的名称。如果有很大差异,那么您可能安装了错误的文件 - 或者系统管理员可能已经这样做了.【参考方案2】:

链接libcommon.so时使用-lcommon开关

【讨论】:

【参考方案3】:

尝试导出指向您保存 so 文件的目录的 LD_LIBRARY_PATH。

export LD_LIBRARY_PATH = /pathofdirectorywheresofilesarekept

【讨论】:

以上是关于/usr/bin/ld: 找不到共享库的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 G++/LD 将库链接到共享对象

LD_LIBRARY_PATH 与 LIBRARY_PATH

gcc 错误“/usr/bin/ld: 找不到 -lstdc++”

ros和V_REP仿真编译出现的问题

ld 找不到 libjasper 库

/usr/bin/ld: 找不到:没有这样的文件或目录