我正在用c++在Ubuntu上用Panda3D框架创建一个游戏。所有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:
不幸的是,我使用了上面编辑的路径作为库路径,得到了相同的结果。

最佳答案

我想不出我会犯这个错误的一个原因。
原因很简单:动态加载程序没有被告知在/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添加到链接行。

关于c++ - 即使在/usr/lib中,C++可执行文件也无法在运行时找到库(在Linux上),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58153463/

10-10 17:41