无法加载共享库:libxerces.so
Unable to load shared library : libxerces.so
运行他人开发的应用程序时,出现以下错误
./appln: error while loading shared libraries: libxerces-c.so.28: cannot open shared object file: No such file or directory
如果我运行ldd命令:
# ldd appln
linux-gate.so.1 => (0x00e20000)
libdl.so.2 => /lib/libdl.so.2 (0x00a61000)
libxerces-c.so.28 => not found
我在当前文件夹中已经有了libxerces-c.so.28文件。请帮助我如何解决错误
您需要将libxerces-c.so放在库路径中的某个位置。可能没有在当前文件夹中搜索库。尝试将其放入/usr/local/lib
显然"当前文件夹"不在可执行文件使用的运行时搜索路径中。我假设您使用的是linux(linux-gate.so.1
)。
您需要确保"当前"目录位于搜索路径下。您可以在链接时使用链接器的-rpath
选项(也接受-R
)或-Wl,-rpath,<dir>
(如果您通过编译器前端调用链接器)来执行此操作。这将在程序运行时使用的搜索路径嵌入到程序中。
不过,请考虑如何安装该程序。添加特定于您的开发环境的路径是没有意义的。您可能需要考虑使用$ORIGIN
或$ORIGIN
相对路径,该路径告诉运行时链接器在包含(或相对于)可执行文件的位置中查找共享对象。您应该始终避免将.
添加到运行时搜索路径中;根据调用程序的进程的当前目录,程序的行为不应该有所不同
作为临时措施,您可以设置环境变量LD_LIBRARY_PATH
来覆盖嵌入式和系统搜索路径,但在最终安装时依赖LD_LIBRARY_PATH
覆盖通常是个坏主意。
默认情况下,不会在当前文件夹中搜索文件(它们应该在/usr/lib等中)。要添加.so查找的当前目录,请使用:
LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH ./appln
当添加新的"本地系统"库(例如在/usr/local/lib/
中)时,最好在/etc/ld.so.conf
中添加一次该目录(/usr/local/lib/
),并且应该运行ldconfig
来更新链接器缓存(每次在/usr/local/lib/
中添加内容时)
参见ldconfig(8),ld.so(8)、ldd(1)、dlopen(3)
如果您想要自己的库,请将LD_LIBRARY_PATH
设置为包含它们的目录(例如$HOME/lib/
和标准目录,例如
export LD_LIBRARY_PATH=$HOME/lib:/usr/lib:/usr/local/lib
在你的~/.bashrc
中(但我不喜欢这种令人困惑的做法,更喜欢管理我的/usr/local/lib/
)。
你也可以使用一些-Wl,-rpath
的论点,但我真的不喜欢。
另请阅读程序库HowTo和Drepper的论文:如何编写共享库
- 如何使用ndk-build.cmd构建Android.so文件
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- CLANG格式在缺少libtinfo.so.5库中不起作用
- C++ 运行时链接器错误 (liblog4cpp.so.5) Eclipse
- 使 ld 忽略来自 /etc/ld.so.conf 的目录
- N-API include an .so or dll
- 加载共享库时C++错误:libopencv_ximgproc.so.4.4
- 如何从构建 libgpio.so 的生成文件构建libgpio.a
- 用于构建 cuda .so 文件(共享库)的生成文件
- 无法从 SO 文件调用 SO 文件的函数 - C++生成文件
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 在jupyter notebook和google colab中使用.so
- 如何在 C++ 的 .so 文件中包含库
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- OpenVINO - 推理库插件 libMKLDNNPlugin.so 无法解析依赖关系
- 如何使用QtCreator将应用程序与"libqsqlpsql.so"链接?
- 添加符号 libgtest.so 错误:命令行中缺少 DSO
- 为什么C++可执行文件在与较新的libstdc++.so链接时运行得更快?
- 无法加载共享库:libxerces.so