假设我的可执行文件 MyApp 动态链接到 so 文件 boost-system.so。我编译了一段时间,一切正常;我对 boost-system 函数的调用做了他们应该做的事情。
过了一会儿,我意识到我需要链接到另一个so文件,SomeAPI.so。但是,SomeAPI.so 与 boost-system.a 静态链接,但它是一个旧的、有缺陷的版本,它的功能与“我的”boost-system 的名称完全相同(当然)。现在,所有调用(来自 MyApp 和 SomeAPI)都将转到静态链接的 SomeAPI 版本(或我的 boost-system 版本,取决于链接顺序,两者都对我不利)。
我希望来自 MyApp 的调用转到我的 boost-system 版本,并希望 SomeAPI 使用其静态链接的 boost-system.a 函数。在 Windows 上,这就是它的工作原理。
我意识到为什么这没有发生,但是除了将“我的”提升系统中的命名空间重命名为本地名称之外,还有什么办法可以解决这个问题?