在运行可执行文件时设置库的搜索目录
Set the search directory for libraries when running executable
我有一个库,我编译并链接到一个测试应用程序。运行测试应用时,它会尝试在相对于项目目录的目录中查找 .so,但由于应用程序是从可执行文件所在的文件夹运行的,因此它找不到库。我希望应用程序在它所在的目录中查找库,这样我只需要确保 .so 与可执行文件一起使用,当我编译时我是否必须将某种参数传递给 gcc 来实现这一点?
这种方法看起来不是很 Linux-y,库应该在/lib 或/usr/lib 中的某个地方,这就是加载器的外观。如果你在其他目录中有它,你可以在运行程序之前尝试使用export LD_LIBRARY_PATH=libpath
。
另一种选择是使用 dlopen 动态打开库,您可以在其中提供路径。
dlopen(/path/to/library.so, RTLD_LAZY);
您可以在此处找到有关动态 .so 加载的更完整示例:http://tldp.org/HOWTO/Program-Library-HOWTO/dl-libraries.html
您还可以设置 RPATH 链接器标志,以便始终在给定目录中搜索某个库:
make LDFLAGS="-Wl,-R -Wl,/home/kris/src"
您可以使用 $ORIGIN 内置变量来引用当前目录:
make CFLAGS="-fPIC" LDFLAGS="-Wl,-rpath '-Wl,$$ORIGIN'"
您可以在运行程序时修改"PATH"。编译器在编译和链接过程中只需要第三方库信息。创建可执行文件后,您可以将第三方零件库移动到所需的任何位置。
由于您没有说出您使用的是哪个系统,因此您可以尝试以下方法:
对于视窗:
set PATH=your library path
对于 Linux:
export LD_LIBRARY_PATH=your library path
您可以使用完整路径名包含该库。
#include<absolute_path_name>
这将起作用。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 有根的二进制搜索树.保留与其父级的链接
- 需要帮助设置在C++中使用的Potrace
- 如何在自删除后将对象设置为nullptr
- 如何从客户端为COM服务器设置dll搜索路径?
- 如何在链接器设置和搜索目录更改后修复" '::iswblank' has not been declared"
- 程序设置二叉树,打印和搜索 - 节点类C++
- STL 设置::查找重新定义的搜索
- C++设置 DLL 搜索位置
- 用于搜索位阵列以查找连续设置/清除位的快速代码
- Clang 工具(libtooling):将标头搜索路径设置为标准 libs 标头.基础框架
- 在运行可执行文件时设置库的搜索目录
- 可以在不设置链接器>常规>附加库目录的情况下搜索哪种 dll 或 lib
- 如何设置 dll 搜索路径
- 如何在C++中为二进制搜索设置计数器
- C++设置对元素的搜索
- 如何设置从CreateProcess创建的流程的搜索路径