0

非常に複雑な一連のライブラリと実行可能ファイルが引き継がれています(Linux)。以前はシステム全体が静的ライブラリを使用して開発されていましたが、数年前にライブラリが共有ライブラリ (-fPIC など) に移行されました。私が見つけた依存関係を確認すると、libA と libB の 2 つの共有ライブラリがあることがわかりました。

  • libA は libB からいくつかの関数を呼び出します
  • libB は libA からいくつかの関数を呼び出します

適切な依存関係を持つライブラリを構築したいと思います。libA は libB に依存し、libB は libA に依存します。しかし、libA のビルド時に lib がまだ存在していないため、リンカーに "-llibB" を指定することはできません。

libB に依存せずに libA をビルドする (未解決のシンボルを作成する) 場合、libA を使用する場合は、libA に未定義のシンボルがあるため、libB もリンクする必要があることに注意する必要があります。うらやましい!

私が探しているのは、libA をビルドし、現時点で libB を持たずに libB への依存関係を作成するようにリンカーに指示する可能性です。それは可能ですか?

libA と libB をマージせずに問題を解決するにはどうすればよいですか?

よろしく、ピーターズ


編集:( ソースコードを書かずに)空のライブラリを直接生成できることがわかりました:

gcc -shared -Wl,-soname,libB.so.$(MAJOR) -o libB.so

次に、ビルド コマンドに -lB を追加して libA をビルドできます。その後、libB.so を削除しました。最後に、インストール後、libB は libA を参照し、libA は libB を参照します。

もちろん、MAJOR 番号は libB の MAJOR と一致する必要があります。これは、メジャー番号がすべてのライブラリに共通であるためです。

もっと適切な方法があるかどうかを自問しています。

4

1 に答える 1