gpt4 book ai didi

linux - 程序错误: ./程序: error while loading shared libraries: lib. 所以:无法打开共享对象文件:没有那个文件或目录

转载 作者:太空狗 更新时间:2023-10-29 11:49:19 25 4
gpt4 key购买 nike

(我想让这个问题尽可能通用,所以我会在标题中省略给我出问题的库的名称。)

我有一个项目,对于那个项目我需要一个库 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。它运行良好,程序运行正常。但我很失望,因为这意味着库是“嵌入”在程序中的(抱歉这里用错了术语:我只是一个学生)。

因此,我在 Stack Overflow 中寻找解决方案:这就是我找到的:error while loading shared libraries: libnsd.so: cannot open shared object file: No such file or directory

库不同,但使用命令

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

我对那个 include 有点困惑;如果它像 C 中的#include 一样工作,我的/etc/ld.so.conf 文件中应该有/usr/local/lib。看来并非如此。

最佳答案

/etc/ld.so.conf 仅由 ldconfig 读取,它使用它来填充动态加载程序缓存 /etc/ld.so。缓存。如果你将库放入 /usr/local/lib 并且 /usr/local/lib 通过该机制包含在搜索路径中,它只会变得可用(没有设置 LD_LIBRARY_PATH) 如果你先运行 ldconfig

关于linux - 程序错误: ./程序: error while loading shared libraries: lib<xxx>. 所以:无法打开共享对象文件:没有那个文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47231616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com