Linux 条件动态链接
这个问题是关于根据特定条件(如环境变量)动态加载特定模块,并将函数调用链接到适当的模块。说明: 我有模块M1,它需要使用模块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,但存在间接性
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上,您可以使用链接器的延迟加载支持来实现这一点。有你需要的信息。这是相关的。不过,这不会是自动的。您将编写代码来实现间接寻址。