1

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

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

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

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

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

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

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

4

1 回答 1

1

Solaris 链接器有一个可能会有所帮助的选项,尽管真正重新设计您的应用程序以在同一程序中不需要两组具有相同名称的库将是最佳解决方案。

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

于 2013-01-15T16:55:32.973 回答