4

コンパイルプロセスの中間ステップとしてlibfoo.aを開発したとします。Makefile.amの行は次のとおりです。

noinst_LIBRARIES = libfoo.a

このライブラリは他のライブラリに依存しています。未定義の参照エラーが発生しないようにするには、LDFLAGS変数を設定する必要があります。これが私がしたことです:

libfoo_a_LDFLAGS = `pkg-config --ldflags some_lib`

ただし、automakeは次のメッセージで失敗します。

variable `libfoo_a_LDFLAGS` is defined but no program or library has `libfoo_a` as canonical name (possible typo)

私はここで何が間違っているのですか?libfoo_a_SOURCESおよび_CFLAGSで機能します。

4

1 に答える 1

5

単純な*.a中間ライブラリを使用してこれを行うことはできません。これは、中間ライブラリがリンクされていないため、LDFLAGS意味がないためです。中間ライブラリは単なるarアーカイブであり、オブジェクトファイルのコレクションにすぎません。arアーカイブには、最終オブジェクトをリンクするために使用する必要のあるフラグを記録する場所がありません。

通常の解決策は、William Pursellが提案することLDFLAGSを実行することです。つまり、ビルドプロセスで作成する最終的な実行可能ファイルまたは共有ライブラリに必要なものを追加します。

もう1つの可能性は、中間ライブラリとしてのみ使用する場合でも、中間ライブラリをlibtool*.laライブラリとしてビルドすることです。これを行うと、ビルドシステムは共有オブジェクトを生成します(基になるオブジェクトファイルを実際のビルドアーティファクトに結合するため、使用しないことになります)が、さらに重要なことに、*。laファイルが作成されます。 、この種の依存関係情報を記録する場所があります。Automakeのマニュアルでは、これを「Libtoolコンビニエンスライブラリ」と呼んでいます。これを行うには、もちろんlibtoolを使用し、でこれを呼び出すように切り替えて、にリストする必要がありlibfoo.laます。ただし、すでにlibtoolを使用している場合を除いて、これはおそらく価値があるよりも厄介です。Makefile.amnoinst_LTLIBRARIES

于 2013-03-17T07:00:47.933 に答える