Program error: ./program: error while loading shared libraries: lib<xxx>.so: cannot open shared object file: No such file or directory
(我想让这个问题尽可能的笼统,所以我将省略标题中给我带来问题的库的名称。)
我有一个项目,为此项目我需要一个图书馆xxx。因此,我下载了该库,并使用默认命令(
1 | gcc -o program program.c -lxxx |
并且gcc报告没有错误。但是,一旦我运行该程序,就会发生以下错误:
1 | ./program: error while loading shared libraries: lib<xxx>.so: cannot open shared object file: No such file or directory |
我想到的第一个解决方案是使用gcc选项-static。它工作正常,程序正常运行。但是我很失望,因为这意味着该库已被"嵌入"到程序中(抱歉,这里的术语错误:我只是一个学生)。
因此,我在Stack Overflow中寻找了一个解决方案:那就是我发现的结果:加载共享库时出错:libnsd.so:无法打开共享对象文件:没有这样的文件或目录
该库是不同的,但是使用命令
1 | export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH |
工作正常。实际上,libxxx.so位于/ usr / local / lib中(仅通过使用
1 2 | sudo echo"/usr/local/lib">> /etc/ld.so.conf sudo ldconfig |
这是棘手的问题:ld.so.conf文件包含以下行
1 | include /etc/ld.so.conf.d/*.conf |
在目录/etc/ld.so.conf.d中,有一个名为libc.conf的文件,其中包含第
行
1 | /usr/local/lib |
我对其中包括有些困惑;如果它与C中的#include一样工作,则我的/etc/ld.so.conf文件中应包含/ usr / local / lib。似乎并非如此。