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窗口,所以我怀疑这是罪魁祸首。
正如我之前所说,图书馆在/usr/lib/panda3d
,我已经检查了大约一百万次,这让我发疯。我想不出为什么会出现此错误的单一原因。任何帮助都值得赞赏:)
编辑:
我正在查看我的文件,/etc/ld.so.conf.d
有一个panda3d.conf
文件,其中一行:/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
添加到链接行中。
- 在 /usr/local/lib 下找不到库
- bitbake-grpc交叉编译/配置失败,错误为c-ares::care引用文件/usr/lib/libcares.s
- C++ 可执行文件在运行时找不到库,即使它在 /usr/lib 中(在 Linux 上)
- 没有规则来设定目标'/usr/lib/x86_64-linux-gnu/libboost_filesystem.so'
- Java System.loadLibrary 不会在 /usr/lib/x86_64-linux-gnu/ 文件夹中查
- 带有定制 GLFW 二进制 /usr/bin/ld 的 Centos 7: /usr/local/lib/libglfw3.a(init.c.o):".text"部分中无法识别的重定位 (0x2a)
- C++: 错误: opencv_core: 即使所需的 .so 文件位于 /usr/lib/ 中,也没有这样的文件或目录
- ld:找不到文件:/usr/lib/crt1.o
- 如何将我的控制台应用程序链接到使用 clang++ 作为编译器的 OSX 环境中的 /usr/local/lib 中存在
- 如何在 C++ 中修复"/usr/bin/ld: warning: liblber-2.4.so.2, needed by //usr/lib/x86_64-linux-gnu/libcurl-gnu
- 在使用 bazel 构建一个简单的应用程序时,得到错误在 '/usr/lib/java/jdk1.8.0_74/bin/java' 找不到 java
- dyld:库未加载:libicui18n.54.dylib 引用自:/usr/local/lib/libxerces-c
- 使用/usr/lib/i386-linux-gnu而不是/usr/lib/x86_64-linux-gnu在CMake中
- G 不会链接到/usr/lib/中的库
- Cmake,在 /usr/local/include 中查找头文件,在 /usr/local/lib 中查找库
- "/usr/lib/libstdc .so.6: version `GLIBCXX_3.4.15' not found"是什么意思,我该如何解决?
- "/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found`",如何解决?
- 捆绑的动态库:继续在/usr/local/lib中查找
- make[2]: *** 没有规则在 CGAL 中将目标 '/usr/lib/i386-linux-gnu/libmpfr.so'
- [UnixODBC][驱动程序管理器]无法打开 lib '/usr/lib/libmyodbc.so' :找不到文件,但文件存在