C++ 可执行文件在运行时找不到库,即使它在 /usr/lib 中(在 Linux 上)
C++ Executable cannot find library at runtime, even though it's in /usr/lib (On Linux)
我正在 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 window,所以我怀疑这是罪魁祸首。
正如我之前所说,图书馆在 /usr/lib/panda3d
中,我现在已经检查了大约一百万次,这让我发疯。我想不出我会收到此错误的单一原因。感谢您的帮助:)
编辑:
我正在查看我的文件,/etc/ld.so.conf.d
中有一个 panda3d.conf
文件,其中一行:/usr/local/lib/x86_64-linux-gnu/panda3d
。这有什么关系吗?
编辑#2:
不幸的是,我使用上面编辑中的路径作为库路径,得到了相同的结果。
I can't think of a single reason why I would get this error.
原因很简单:动态加载器没有被告知在 /usr/lib/panda3d
中查找共享库,因此也没有。
您可以 运行 您的程序:
LD_DEBUG=files,libs ./Test
并观察加载程序正在搜索哪些目录。
panda3d.conf
... with one line: /usr/local/lib/x86_64-linux-gnu/panda3d
那是错误的目录(或者至少不是你的库所在的目录)。
解决此问题的一种方法是将上述路径更正为 /usr/lib/panda3d
和 运行 sudo ldconfig
.
另一种方法是将 -Wl,-rpath=/usr/lib/panda3d
添加到 link 行。
我正在 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 window,所以我怀疑这是罪魁祸首。
正如我之前所说,图书馆在 /usr/lib/panda3d
中,我现在已经检查了大约一百万次,这让我发疯。我想不出我会收到此错误的单一原因。感谢您的帮助:)
编辑:
我正在查看我的文件,/etc/ld.so.conf.d
中有一个 panda3d.conf
文件,其中一行:/usr/local/lib/x86_64-linux-gnu/panda3d
。这有什么关系吗?
编辑#2:
不幸的是,我使用上面编辑中的路径作为库路径,得到了相同的结果。
I can't think of a single reason why I would get this error.
原因很简单:动态加载器没有被告知在 /usr/lib/panda3d
中查找共享库,因此也没有。
您可以 运行 您的程序:
LD_DEBUG=files,libs ./Test
并观察加载程序正在搜索哪些目录。
panda3d.conf
... with one line:/usr/local/lib/x86_64-linux-gnu/panda3d
那是错误的目录(或者至少不是你的库所在的目录)。
解决此问题的一种方法是将上述路径更正为 /usr/lib/panda3d
和 运行 sudo ldconfig
.
另一种方法是将 -Wl,-rpath=/usr/lib/panda3d
添加到 link 行。