2010-11-22 7 views
7

私はAutotoolsを使って特定のライブラリとリンクする必要のあるCプログラムをビルドしようとしています。 1つのCソースファイルのみが含まれています。リンカーのフラグが間違っている場所

これは、それに関連付けられたMakefile.amである:私はmakeを実行すると

bin_PROGRAMS=game 
game_SOURCES=main.c 
game_CFLAGS=`pkg-config --cflags libglfw` 
game_LDFLAGS=`pkg-config --libs libglfw` 

、それはこの使用して、それをコンパイルしようとします:

gcc `pkg-config --cflags libglfw` -g -O2 `pkg-config --libs libglfw` -o game game-main.o 

をしかし、これは、ライブラリのリンクとして、間違っていますフラグは最後になければなりません。そうしないと、未定義の参照についてエラーが発生します。たとえば、これを実行すると:

gcc `pkg-config --cflags libglfw` -g -O2 -o game game-main.o `pkg-config --libs libglfw` 

コンパイルが正常に実行されます。

LDFLAGSプライマリが途中ではなく最後に追加されるようにするにはどうすればよいですか?

答えて

10

まず、ライブラリのLDFLAGSを悪用しないでください。 LDFLAGSはリンカーフラグです。 foo_LDADD(実行ファイル用)またはfoobar_LIBADD(ライブラリ作成時)を使用して、リンクライブラリをリストします。

また、Makefile.am内でpkg-configを実行する必要はなく、無駄です。ただ、使用:

 
game_CFLAGS = ${libglfw_CFLAGS} 
game_LDADD = ${libglfw_LIBS} 

libglfw_CFLAGS,LIBSconfigure.acに、このことにより、移入さ:

PKG_CHECK_MODULES([libglfw], [libglfw])

+0

どのように私はむしろautotoolsのよりも、通常のメイクファイルでこれを解決するのでしょうか?私が知る限り、makeはLDADDを尊重しません(autotoolsだけです)。 –

+1

フォローアップ:通常のmakefileでは、解決策は 'LDFLAGS = -lm'ではなく' LOADLIBES = -lm'を使うことです。 –

関連する問題