Autotools: A Practioner 's Guide to GNU Autoconf, Automake, and Libtoolの第 6 章 (libtool を使用したライブラリの構築) では、ライブラリのリンクの例が示されています。
この例では、ライブラリlibjupiter.so
が別のライブラリにリンクされていますlibjupcommon.a
。libjupiter.so
PIC が必要なため、最初の試行は失敗しますが、そうでlibjupcommon.a
はありません。libjupcommon_a_CFLAGS = -fPIC
著者はそれを修正するために追加します。ずっと良くなりますが、「共有ライブラリ libjupiter.la をスタティック ライブラリ ../common/libjupcommon.a に対してリンクすると、移植性がありません! 」という警告が表示されます。」が表示されます。
したがって、作成者は、libtool を使用して をビルドし、Makefile.am を再度変更しlibjupcommon.la
ます。へのlibjupiter
リンクlibjupcommon.la
。このような:
noinst_LTLIBRARIES = libjupcommon.la
libjupcommon_la_SOURCES = jupcommon.h print.c
と
...
libjupiter_la_LIBADD = ../common/libjupcommon.la
今回はすべてOKです。
今、私の問題:
libjupiter
needsと同じように、別のライブラリが必要なライブラリがありますlibjupcommon
。違いは、私libjupcommon
が別のプロジェクトからのもので、システムにインストールされていることです。ではありませんnoinst_LTLIBRARIES
。.so
と.a
バージョンの両方が存在します。libjupcommon.la
例のように をリンクしようとすると、.so
が選択されますが、動的なリンク関係は必要ありません。本の例のように、にリンクしたい.a
。
.a
明示的に (_LIBADD=the .a ファイルを使用して) にリンクすると、使用可能なライブラリが得られますが、「... ポータブルではありません」という警告が表示されます。
.a
この場合、へのリンクを達成する適切な方法は何ですか?
PS:書籍の公式サイトからサンプルをダウンロードしてください。でautotools/book/jupiter-libtool-ch6/common
、Makefile.am を変更して、私の問題によく似たものにする必要がありますnoinst_LTLIBRARIES
。lib_LTLIBRARIES