Linux 条件动态链接

Linux 条件动态链接,linux,windows,gcc,linker,clang,Linux,Windows,Gcc,Linker,Clang,这个问题是关于根据特定条件(如环境变量)动态加载特定模块,并将函数调用链接到适当的模块。说明: 我有模块M1,它需要使用模块M2或M3,具体取决于环境变量。它类似于模块M2和M3提供函数f()。以下是两个不同的问题: M1希望在设置了特定环境变量时调用M2::f() 如果设置了相同的环境,M2希望调用M3::f()。因此,M1::f()->M2::f()->M3::f() 如果未设置相同的变量,M2将消失,而M1对f1()的调用总是只调用M3::f() 因此,要求同时加载M2和M3,但存在间接性

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

我有模块M1,它需要使用模块
M2
M3
,具体取决于环境变量。它类似于模块
M2
M3
提供函数
f()
。以下是两个不同的问题:

  • M1
    希望在设置了特定环境变量时调用
    M2::f()
  • 如果设置了相同的环境,
    M2
    希望调用
    M3::f()
    。因此,
    M1::f()->M2::f()->M3::f()
  • 如果未设置相同的变量,
    M2
    将消失,而
    M1
    f1()
    的调用总是只调用
    M3::f()
  • 因此,要求同时加载
    M2
    M3
    ,但存在间接性问题

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

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


    任何其他想法都是受欢迎的。

    我经历了一个类似的情况,以节省内存并避免自动加载所有模块(插件)。我使用了
    dlsym
    library,并根据需要加载了所有模块。我可以分享代码片段,如果这是你正在寻找的。你也可以在网上找到它


    在Windows上,您可以使用链接器的延迟加载支持来实现这一点。有你需要的信息。这是相关的。不过,这不会是自动的。您将编写代码来实现间接寻址。