假设我的可执行文件MyApp对so文件boost-system.so进行动态链接。我进行了编译,一切都很好,我对boost-system功能的调用也按照预期工作。
一段时间后,我意识到需要链接到另一个so文件SomeAPI.so。但是,SomeAPI.so已经静态链接到了旧版本的buggy的boost-system.a,并且具有与“我的”boost-system完全相同的函数名称。现在,所有调用(来自MyApp和SomeAPI)都将转到SomeAPI静态链接的版本(或者我的boost-system版本,取决于链接顺序,这两种情况对我都不好)。
我希望MyApp的调用能够去到我的boost-system版本,而SomeAPI则使用其静态链接的boost-system.a函数。在Windows上,这就是它的工作方式。
我知道为什么会出现这种情况,但是否有其他解决方法,除了将“我的”boost-system名称空间重命名为本地名称?
一段时间后,我意识到需要链接到另一个so文件SomeAPI.so。但是,SomeAPI.so已经静态链接到了旧版本的buggy的boost-system.a,并且具有与“我的”boost-system完全相同的函数名称。现在,所有调用(来自MyApp和SomeAPI)都将转到SomeAPI静态链接的版本(或者我的boost-system版本,取决于链接顺序,这两种情况对我都不好)。
我希望MyApp的调用能够去到我的boost-system版本,而SomeAPI则使用其静态链接的boost-system.a函数。在Windows上,这就是它的工作方式。
我知道为什么会出现这种情况,但是否有其他解决方法,除了将“我的”boost-system名称空间重命名为本地名称?
SomeAPI.so
,使其不与boost-system.so
进行静态链接。 - Mats Petersson