如何链接运行时可能不存在的目录?

时间:2011-10-10 09:56:50

标签: c++ linker shared-libraries

我正在为Linux编写一个库,它有一些依赖于共享库libfoo.so的功能。

我正在尝试将libfoo.so不存在的情况考虑在内。对于这种情况,我有一个明确定义的行为,但我不知道如何正确实现它,链接明智。

目前,我的库是针对libfoo.so编译的,当客户端尝试在不包含libfoo.so的环境中编译它的代码时,他会遇到链接错误。

我的问题是,如何构建我的库,即使libfoo.so不存在,它也会编译,但表现不同。我能够自己提出的唯一解决方案是从它分支一个不支持foo的版本,但必须有一个更好的方法......

提前致谢

由于给出的答案,后续跟进: 似乎没有链接到libfoo而是用dlopen动态加载它解决了这个问题,但它需要我手动导出所有符号,并且范围有限......是否有任何“不那么痛苦”的实现呢?

1 个答案:

答案 0 :(得分:2)

根据是否要在编译时或运行时检测到库的存在,有两种不同的问题适合描述。

在编译时,您将不得不使用一些工具来检测库是否存在,并修改构建脚本以将该信息传递给代码(思考定义)。

在运行时,您可以避免链接到库,而是动态加载它。代码应该处理找到/加载库的失败并回退到替代版本。