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

时间:2013-01-15 09:14:26

标签: gcc linker solaris

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

链接顺序如:...- lMyAce -lsdk -lAnotherAce

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

如果我将链接顺序更改为:... - lsdk -lAnotherAce -lMyAce

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

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

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

1 个答案:

答案 0 :(得分:1)

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

Direct Bindings在每个库或程序中记录它找到一个符号的库,因此如果libsdk.so是用-B direct -lAnotherAce构建的,它会将每个引用记录到AnotherAce,而不是MyAce。然后,您将代码与-B direct -lsdk -lMyAce链接(不包括-lAnotherAce,因为libsdk依赖关系会处理这个问题),并且您的代码会记录它对MyAce的调用。