程序错误:./program:加载共享库时出错:lib <xxx> .so:无法打开共享对象文件:没有这样的文件或目录

勒克斯·贾米

(我想使这个问题尽可能的笼统,所以我将在标题中省略给我带来问题的库的名称。)

我有一个项目,对于该项目,我需要一个图书馆xxx。因此,我下载了该库,并使用默认命令(./configure && make && make install && make clean进行了编译-已记录了安装过程-并尝试了文档中给出的示例是否有效地查看了所有设置。我将代码复制并粘贴到.c文件中,并使用以下命令对其进行了编译:

gcc -o program program.c -lxxx

和gcc报告没有错误。但是,一旦我运行该程序,就会发生以下错误:

 ./program: error while loading shared libraries: lib<xxx>.so: cannot open shared object file: No such file or directory

我想到的第一个解决方案是使用gcc选项-static。它工作正常,程序正常运行。但是我很失望,因为这意味着该库已“嵌入”程序中(抱歉,这里的术语错误:我只是一个学生)。

因此,我在堆栈溢出中寻找解决方案:这就是我发现的:加载共享库时出错:libnsd.so:无法打开共享库文件:没有这样的文件或目录

库是不同的,但是使用命令

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

工作正常。实际上,libxxx.so位于/ usr / local / lib中(通过使用即可找到ls /usr/local/lib | grep xxx)。线程建议的另一个永久性解​​决方案是在/etc/ld.so.conf文件中写入目录名称:

sudo echo "/usr/local/lib" >> /etc/ld.so.conf
sudo ldconfig

这就是棘手的问题:ld.so.conf文件包含以下行

include /etc/ld.so.conf.d/*.conf

在目录/etc/ld.so.conf.d中,有一个名为libc.conf的文件,其中包含以下行

/usr/local/lib

我对其中包括有些困惑;如果它像CI中的#include一样工作,则应该在我的/etc/ld.so.conf文件中包含/ usr / local / lib。看来并非如此。

弗洛里安·韦默(Florian Weimer)

/etc/ld.so.conf只能由读取ldconfig,它使用它来填充动态加载程序缓存/etc/ld.so.cache如果你把库导入/usr/local/lib/usr/local/lib包含在通过该机制的搜索路径,它只会变得可用(不设置LD_LIBRARY_PATH)如果您运行ldconfig第一。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章