防止每次链接gcc/libtool时从头开始构建共享对象



我正在构建一个自动工具应用程序,该应用程序链接到两个共享库libA.so和libB.so。这两个库又由共享库和静态(是的,反对推荐静态)库组成。静态库libmetis包含在libA和libB中,但遗憾的是,它们的版本不同。

假设libA.so有libA1.so,libA2.so……libmetis5.a

假设libB.so有libB1.so,libB2.so……libmetis4.a

在运行Ubuntu的机器1上,最终应用程序的链接行看起来像

libtool mode=link application.c -lA -lB -o application

在运行CentOS的机器2上,最终应用程序的链接行看起来像

libtool mode=link application.c -lA -lA1 -lA2... -lmetis5 -lB -lB1 -lB2... -lmetis4 -o application

由于libA和libB都是从机器2中的连续库中重新链接的,因此我最终会发现libA和libB都有一个相同版本的libmetis,这会导致应用程序崩溃。

我如何控制或禁止Libtool重新链接已经很好的to go库的设置在哪里?我试过不只为应用程序使用自动工具,手动提供链接线,但行为是一样的。

谢谢你的帮助,

Elan

如果你真的在CentOS机器2上把metris[45]拉到lib[AB]中,那么它们就不会出现在链接线上(就像在Ubuntu机器1下一样)。

最新更新