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

How can I link with a directory which might not exist while running?

本文关键字:链接 不存在 运行时      更新时间:2023-10-16

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

我正在尝试的情况下,libfoo。所以不存在于考虑之中。对于这种情况,我有一个定义良好的行为,但我不知道如何正确地实现它,链接方面。

目前,我的库是针对libfoo编译的。因此,当客户端试图在不包含libfoo的环境中编译它的代码时。所以他得到了链接错误。

我的问题是,我如何构建我的库,即使libfoo。所以不存在,但行为不同。我自己能想到的唯一解决方案就是从它分支出一个不支持foo的版本,但一定有更好的方法…

Thanks in advance

由于给定的答案而进行的后续操作:似乎不是链接libfoo,而是动态加载它与dlopen解决了这个问题,但它需要我手动导出所有的符号,并且在范围内是有限的…是否有"不那么痛苦"的方法来实现?

有两个不同的问题符合描述,这取决于库的存在是在编译时检测还是在运行时检测。

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

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