Libtoolライブラリと実行可能ファイルを組み合わせて使用するautomakeプロジェクトをセットアップしようとしていますが、automakeのドキュメント、特にespを理解するのに苦労しています。コンパイラにリンクするように指示することに関連しています。
では、誰かがLDADD
とLIBADD
の違いを説明できますか?
のようなもの:
-lname_of_library
スタイル値と直接のファイル名など.関連するドキュメントを読み込もうとするときはいつでも、自分が知らないことを知っていると想定しているようです。
ライブラリにはLIBADD
プライマリを使用し、実行可能ファイルにはLDADD
を使用します。 libtoolライブラリ_libfoo.la
_をビルドしていて、それが別のライブラリ_libbar.la
_に依存している場合は、以下を使用します。
_libfoo_la_LIBADD = libbar.la
_
Libtool以外のライブラリがある場合は、これらを_-L
_および_-l
_オプションを使用して追加することもできます。
_libfoo_la_LIBADD = libbar.la -L/opt/local/lib -lpng
_
通常は、configureスクリプトを使用してこれらの追加ライブラリを検索し、_AC_SUBST
_を使用してそれらを渡します。
_libfoo_la_LIBADD = libbar.la $(EXTRA_FOO_LIBS)
_
プログラムの場合は、単にLDADD
を使用します。
_myprog_LDADD = libfoo.la # links libfoo, libbar, and libpng to myprog.
_
境界は少しあいまいな場合があります。 $(EXTRA_FOO_LIBS)
が_myprog_LDADD
_に追加されている可能性があります。 libtool(_.la
_)ライブラリに依存関係を追加し、libtool
を使用してプラットフォーム固有のすべてのリンカーマジックを実行することは、通常、最良のアプローチです。すべてのリンカーメタデータを1か所に保持します。
いずれかの本で述べられているように、LDADD
はADDitionalリンカー(LD)アイテム、つまりリンクを実行するときに追加されるアイテムです。これは、たとえば、プログラムを作成する場合などです。 LDADD
は以下を指定できます。
lib/libfudge.la
-lm
、または/lib/libmagicalwonderland.a
-L/opt/lib -lmagical
それらは優先順に並んでいます。最後の2つを使用するのは、存在するかもしれないし存在しないかもしれないものを指し示しているので、単に尋ねるが問題を引き起こすためです。
LIBADD
は、使用するADDitional LIBrariesを指定するためのものです。これは、ライブラリを構築するときに使用して、ライブラリを構築または使用するために追加のライブラリが必要であることを指定します。 libfred_la_LIBADD =
のように指定されていることがわかります。 libtoolライブラリまたはシステムライブラリを指定するために使用でき、これらのライブラリをライブラリの結果のlibtool .la
に配置するため、ライブラリへのリンクに関しては、適切なすべてのライブラリが提供されます。
リンクするライブラリのみを指定する必要があるため、たとえば、私のライブラリlibfred.la
はいくつかの数学ルーチンに依存します。つまり、libm
に依存します。ライブラリに追加のライブラリを指定すると、次のようになります。
libfred_la_LIBADD = -lm
この依存関係は、ライブラリをビルドするときにエンコードされ、ライブラリのコンシューマにも渡されます。
経験則は次のとおりです。