【发布时间】:2020-09-25 04:16:16
【问题描述】:
这个问题是关于根据特定条件动态加载特定模块,例如环境变量和将函数调用链接到适当的模块。说明:
我有模块 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,也可以。
也欢迎任何其他想法。
【问题讨论】:
-
在 Windows 上,您可以使用链接器的延迟加载支持来实现这一点。 Linker Support for Delay-Loaded DLLs 有您需要的信息。 Understanding the Helper Function 是相关的。不过,这不会是自动的。您将编写代码来实现间接。
标签: linux windows gcc linker clang