为什么找不到我的共享库?

时间:2012-06-20 00:23:32

标签: gcc shared-libraries ld

我正在尝试编译链接到Sundown生成的共享库的示例程序。我正在编译这个程序。

$ gcc -o sd sundown.c -L. -lsundown

然而,当我运行它时,我收到以下错误。

  

./ sd:加载共享库时出错:libsundown.so:无法打开共享对象   file:没有这样的文件或目录

ls的输出是。

$ ls
libsundown.so  libsundown.so.1  sundown.c  sd

为什么ld找不到共享库?

2 个答案:

答案 0 :(得分:6)

简短解决方案:

.(或-L旗帜中的任何内容)添加到LD_LIBRARY_PATH。当您运行sd时,它将在标准位置和LD_LIBRARY_PATH中查找库。请注意,由于您已添加.,因此仅当您从libsundown.so所在的同一目录运行sd时,此方法才有效。

  

我打算分发已编译的二进制文件。如何在不强制人们编辑LD_LIBRARY_PATH的情况下分发库?

您应该在其中一个标准位置安装libsundown.so,例如/ usr / lib或/ usr / local / lib。你可以使用安装程序或make文件,或者像INSTALL或README这样简单的东西来告诉用户将库粘在那里,并确保将权限设置为合理的。

答案 1 :(得分:0)

在具有/ usr / lib和/ usr / lib64的Centos系统上,如果将64位库手动安装到/ usr / lib,则在运行时,该库可能不可见,即使在构建时就可见(我使用了自动工具,就可以从/ usr / lib找到我的zopfli库,而没有任何问题)。当我执行链接到/usr/lib/libzopfli.so.1的my_binary时,我得到了

libzopfli.so.1 => not found

将libzopfly.so.1从/ usr / lib移至/ usr / lib64后,一切正常。