即使在/ usr / lib中,C ++可执行文件也无法在运行时找到库(在Linux上)

时间:2019-09-29 08:14:01

标签: c++ linux ubuntu shared-libraries panda3d

我正在Ubuntu上使用Panda3D框架用c ++创建游戏。所有Panda3D共享库都在/usr/lib/panda3d中,所有标头都在/usr/include/panda3d中。我正在使用SCons进行编译,但是我已经使用gcc进行了尝试,并且它是相同的,因此这里是命令:

g++ -o src/main.o -c -fPIC -O2 -std=gnu++11 -I/usr/include/python2.7 -I/usr/include/panda3d -Iinclude src/main.cpp

g++ -o Test src/main.o -L/usr/lib/panda3d -lp3framework -lpanda -lpandafx -lpandaexpress -lpandabullet -lp3dtoolconfig -lp3dtool -lp3direct -lpthread

这是运行可执行文件时出现的错误:

./Test: error while loading shared libraries: libp3framework.so.1.11: cannot open shared object file: No such file or directory

代码中没有太多东西,只是初始化一个Panda3D窗口,所以我怀疑这是罪魁祸首。

正如我之前所说,这些库位于/usr/lib/panda3d中,我现在已经检查了大约一百万次,这让我发疯。我想不出出现此错误的单一原因。任何帮助表示赞赏:)

编辑:

我正在浏览文件,在panda3d.conf中有一个/etc/ld.so.conf.d文件,其中一行:/usr/local/lib/x86_64-linux-gnu/panda3d。这有关系吗?

编辑#2:

不幸的是,我使用上面编辑中的路径作为库路径,并且得到了相同的结果。

1 个答案:

答案 0 :(得分:1)

  

我想不出出现此错误的单一原因。

原因很简单:没有告诉动态加载器在/usr/lib/panda3d中查找共享库,因此也没有。

您可以使用以下程序运行程序:

LD_DEBUG=files,libs ./Test

并观察装载程序正在搜索的目录。

  

panda3d.conf ...,其中一行:/usr/local/lib/x86_64-linux-gnu/panda3d

那是错误的目录(或者至少不是您的库所在的目录)。

解决此问题的一种方法是将上述路径更正为/usr/lib/panda3d并运行sudo ldconfig

另一种方法是将-Wl,-rpath=/usr/lib/panda3d添加到链接行。