0

「フロントエンド」ライブラリと複数の「バックエンド」ライブラリを構築するライブラリ プロジェクトを維持しています。このプロジェクトでは、Libtool を含む Autotools スイート (私が学習していて、プロジェクトの実装にはメンテナンスが必要であることがわかっています) を利用しています。共有ライブラリとして、すべてが非常にうまく機能します。ライブラリを使用するアプリケーション開発者がいて、複数のプラットフォーム間でのソフトウェア配布を容易にするために静的ライブラリを使用してビルドすることを好みます (彼の動機について議論するつもりはありません)。

彼は以前、私たちのビルド システムを使用して 1 つの大きな静的ライブラリをビルドできましたが、現在はできなくなっていると私に言いました。これがいつ発生したかを正確に追跡することはできませんでしたが、2 つの変更のいずれかに関連している可能性があると思われます。最初の変更は、バンドルされている libtool ソース ディレクトリの削除です。2 つ目は、バックエンド ライブラリを以前のように /usr/local/lib (デフォルトの場所) に分散させるのではなく、/usr/local/lib/project に配置することでした。

私が学ぶことができなかったのは、フロントエンド ライブラリをバックエンドと組み合わせて、/usr/local/lib の下に単一の便利なライブラリを作成し、それを Autotools フレームワーク内で行う方法です。これは可能だと思われますが、学ぶべき例は見つかりませんでした。

余談ですが、プロジェクトはテスト スイートの一部としていくつかのユーティリティをビルドします。--disable-shared オプションを指定して configure を実行してから make を実行すると、ユーティリティがプロジェクト ライブラリに静的にリンクされます。今、私の使命は、この機能をサードパーティのアプリケーションで利用できるようにすることです。

4

1 に答える 1

3

Libtool の専門用語では、コンビニエンス ライブラリはインストールされていないライブラリです。noinst_プレフィックスを付けて Automake に宣言する必要があります。

複数の便利なライブラリからライブラリ L を構築する場合: すべての便利なライブラリが集められて、インストールされる単一のライブラリ L が構築されます。これは、L が共有ライブラリであるか静的ライブラリであるかに関係なく発生します。

私の推測では、3 つ目の変更があると思います。おそらく、過去にはすべてのバックエンド ライブラリが便利な (つまり、 ) ライブラリであったため、最終的には 1つnoinst_だけを効果的にインストールしていました。しかし、ある時点で、これらすべてのバックエンド ライブラリを単独でインストールすることが決定された (つまり、toなどに変更する) ため、これらのライブラリは便利なライブラリではなくなり、フロントエンドには含まれなくなりました。 .so.anoinst_pkglib_

インストールされたバックエンド ライブラリがまだフロントエンド ライブラリのリストにある場合_LIBADD、この依存関係は Libtool によって記録されていることに注意してください。frontend.laインストールされたファイルにリンクするときはいつでも(これには、ライブラリのユーザーであっても、リンクに を使用する必要があります)、Libtool は、静的ライブラリまたは共有ライブラリとしてコンパイルされたlibtoolかどうかに関係なく、バックエンド ライブラリも含める必要があります。frontend.la

PS: バックエンド ライブラリが実際に Libtool モジュール (別名プラグイン) であり、フロントエンドによって dloped されている場合、問題は少し異なります。

于 2011-12-08T07:58:51.510 に答える