4

假设我的可执行文件 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 上,这就是它的工作原理。

我意识到为什么这没有发生,但是除了将“我的”提升系统中的命名空间重命名为本地名称之外,还有什么办法可以解决这个问题?

4

1 回答 1

1

使用LD 版本脚本隐藏您不希望其他 .so 文件看到的函数名称。

于 2014-02-14T12:06:49.283 回答