/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: 找不到共享库的主要内容,如果未能解决你的问题,请参考以下文章
LD_LIBRARY_PATH 与 LIBRARY_PATH