【问题标题】:Conditional Dynamic Linking条件动态链接
【发布时间】:2020-09-25 04:16:16
【问题描述】:

这个问题是关于根据特定条件动态加载特定模块,例如环境变量和将函数调用链接到适当的模块。说明:

我有模块 M1,它需要根据环境变量使用模块 M2M3。就像M2M3 两个模块都提供了一个函数f()。这里有两个不同的问题:

  1. 如果设置了某些环境变量,M1 想要调用 M2::f()
  2. 如果设置了相同的环境,M2 想调用M3::f()。因此,M1::f() ->M2::f() -> M3::f()
  3. 如果没有设置相同的变量,M2 就会消失,M1f1() 的调用总是只调用M3::f()

所以,要求M2M3同时加载,但是存在间接问题。

这是 C++ 环境,我们不想使用虚函数。 我宁愿寻找一些可能使这成为可能的链接器解决方案。

该应用程序需要移植到多个操作系统/硬件平台,但如果您能告诉我仅适用于 Linux 和/或 Windows,也可以。

也欢迎任何其他想法。

【问题讨论】:

标签: linux windows gcc linker clang


【解决方案1】:

我经历了一个类似的情况,以节省内存并避免自动加载所有模块(插件)。我使用了dlsym 库,并按需加载了所有模块。如果这是您正在寻找的,我可以分享代码 sn-p。您也可以在互联网上获得它。

https://linux.die.net/man/3/dlsym

【讨论】:

    猜你喜欢
    • 2021-11-22
    • 2021-01-30
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多