Autotools: A Practioner 's Guide to GNU Autoconf, Automake, and Libtoolの第 6 章 (libtool を使用したライブラリの構築) では、ライブラリのリンクの例が示されています。
この例では、ライブラリlibjupiter.soが別のライブラリにリンクされていますlibjupcommon.a。libjupiter.soPIC が必要なため、最初の試行は失敗しますが、そうで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です。
今、私の問題:
libjupiterneedsと同じように、別のライブラリが必要なライブラリがあります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