如何与运行时可能不存在的目录进行链接
How can I link with a directory which might not exist while running?
我正在为Linux编写一个库,它有一些功能依赖于共享库libfoo.so.
我正在尝试的情况下,libfoo。所以不存在于考虑之中。对于这种情况,我有一个定义良好的行为,但我不知道如何正确地实现它,链接方面。
目前,我的库是针对libfoo编译的。因此,当客户端试图在不包含libfoo的环境中编译它的代码时。所以他得到了链接错误。
我的问题是,我如何构建我的库,即使libfoo。所以不存在,但行为不同。我自己能想到的唯一解决方案就是从它分支出一个不支持foo的版本,但一定有更好的方法…
Thanks in advance
由于给定的答案而进行的后续操作:似乎不是链接libfoo,而是动态加载它与dlopen解决了这个问题,但它需要我手动导出所有的符号,并且在范围内是有限的…是否有"不那么痛苦"的方法来实现?
有两个不同的问题符合描述,这取决于库的存在是在编译时检测还是在运行时检测。
在编译时,您将不得不使用一些工具来检测库是否存在,并修改构建脚本以将该信息传递给代码(考虑定义)。
在运行时,您可以避免链接到库,而是动态加载它。代码应该处理定位/加载库的失败,并返回到替代版本。
相关文章:
- 针对静态库的 G++ 链接不起作用
- CMake 生成的程序无法在 Windows 上链接:尝试链接到不存在的文件
- boost::存在符号链接不取消引用
- 模板外部链接不起作用
- 与LLVM LLD链接不起作用[MACOS]
- 返回值上的 C++ 方法链接不起作用
- Boost Logger静态链接:不起作用
- CMake 链接不正确?
- 链接不返回对象的运算符
- cocos2d android编译时链接不起作用
- 如果我在GCC中编译并链接不需要的库,会发生什么
- Visual Studios 9 Dll链接不一致
- 尝试使用 swig 将C++库与 C# 链接 - 不会让我添加对 C# 项目的 resulging dll 的引用
- 编译伪C++程序时链接不成功
- 为什么隐式DLL链接需要相关的Lib文件,而显式链接不需要
- CMake链接不是子文件夹
- Java c++ jni链接不满足错误
- SFML 2.1代码::Blocks静态链接不工作
- 增加系统链接不显示MFC对话框
- 从源代码构建GCC 5.4;这样构建的可执行文件试图链接不兼容的libstdc++,但运行失败