我正在尝试编译一个链接到日落生成的共享库的示例程序。我正在像这样编译程序。
$ gcc -o sd sundown.c -L. -lsundown然而,当我运行它时,我会得到以下错误。
./sd:加载共享库时出错: libsundown.so:无法打开共享对象文件:没有这样的文件或目录
ls的输出是。
$ ls
libsundown.so libsundown.so.1 sundown.c sd为什么ld找不到共享库
发布于 2012-06-20 00:45:28
短期解决方案:
将. (或-L标志中的任何内容)添加到LD_LIBRARY_PATH中。当您运行sd时,它将在标准位置和LD_LIBRARY_PATH中查找库。请注意,由于您已经添加了.,只有在您从同一个目录运行sd时,libsundown.so才能工作。
我计划分发编译好的二进制文件。我如何才能在不强迫人们编辑他们的LD_LIBRARY_PATH的情况下发布库呢?
您应该在一个标准位置安装libsundown.so,比如/usr/lib或/usr/local/lib。您可以使用安装程序或make文件,或者像安装或自述( README )这样简单的方法,告诉用户将库放在那里,并确保权限设置为合理的权限。
发布于 2020-10-06 02:10:25
在带有/usr/lib和/usr/lib 64的Centos系统上,如果手动将64位库安装到/usr/lib中,那么在运行时,库可能是不可见的,即使在构建时它是可见的(我使用了autotools,它能够在/usr/lib中找到我的zopfli库,没有任何问题)。当我执行链接到/usr/lib/libzopfli.so.1的my_binary时,我得到了
libzopfli.so.1 => not found将libzopfly.so.1从/usr/lib移动到/usr/lib 64之后,一切都正常。
https://stackoverflow.com/questions/11111293
复制相似问题