0

libA.so と libB.so という 2 つの共有ライブラリにリンクする autotools アプリケーションを構築しています。どちらも、共有ライブラリと静的 (はい、静的推奨に反して) ライブラリで構成されています。スタティック ライブラリ 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 が既に有効なライブラリを再リンクすることを禁止する設定はどこにありますか? アプリケーションのみにautotoolsを使用せず、手動でリンク行を提供しようとしましたが、動作は同じです。

ご協力いただきありがとうございます、

エラン

4

1 に答える 1

0

CentOS マシン 2 で実際に metris[45] を lib[AB] に取り込んでいる場合、それらはリンク ラインに表示されません (Ubuntu マシン 1 では表示されないのと同様)。

于 2012-10-17T16:46:37.120 に答える