如何链接两个冲突的共享库



我的项目正在使用ACE库,需要链接另一个库libsdk。所以,它使用了另一个版本的ACE库。

链接顺序如下:…-lMyAce -lsdk -lAnotherAce

当应用程序运行时,libsdk。MyAce中所谓的方法(我检查了核心转储),并且应用程序崩溃。

如果我改变链接顺序为:…-lsdk -lAnotherAce -lMyAce

我的代码调用方法在AnotherAce,它也是崩溃。

如果我只链接我的ACE,它就崩溃了。如果只链接AnotherAce,会出现一些链接错误。

让libsdk。调用它的ACE库,我的代码调用我的ACE库。我该如何解决这个问题?

Solaris链接器有一个选项可能会有所帮助,但实际上是重新设计应用程序,使其不需要在同一个程序中使用两组具有相同名称的库将会是最好的解决方案。

直接绑定在每个库或程序中记录它在哪个库中找到了一个符号,所以如果libsdk。所以是用-B直接-lAnotherAce构建的,它会记录它的每个引用到AnotherAce,而不是MyAce。然后用-B直接-lsdk -lMyAce链接你的代码(不包括-lAnotherAce,因为libsdk依赖项会照顾它),你的代码会记录它调用到MyAce。

最新更新