so文件:从另一个so文件调用的函数

so files: function called from another so file than intended

本文关键字:so 文件 函数 调用 另一个      更新时间:2023-10-16

比方说,我的可执行文件MyApp与so文件boost-system.so动态链接。我编译了一段时间,一切都很好;我对提升系统功能的调用做了它们应该做的事情。

过了一段时间,我意识到我需要链接到另一个so文件,SomeAPI.so。然而,SomeAPI.so已经静态链接到了boost system.a,但它是一个旧的、有缺陷的版本,它的功能与"我的"boost系统的名称完全相同(当然)。现在,所有调用(来自MyApp和SomeAPI)都将转到静态链接的SomeAPI版本(或者我的boost系统版本,取决于链接顺序,两者对我都不好)。

我希望我从MyApp调用到我的boost系统版本,SomeAPI使用其静态链接的boost system.a函数。在Windows上,它就是这样工作的。

我知道为什么没有发生这种情况,但除了将"我的"boost系统中的名称空间重命名为本地名称空间之外,还有其他方法吗?

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