链接器标志在错误的地方

时间:2010-11-22 02:14:40

标签: autotools

我正在尝试使用Autotools来构建我需要与某些库链接的C程序。它只包含一个C源文件。

这是与之关联的Makefile.am:

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

当我运行make时,它会尝试使用它编译它:

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主要内容?

1 个答案:

答案 0 :(得分:11)

您可以从不滥用LDFLAGS开始。 LDFLAGS用于链接器标志。使用foo_LDADD(用于可执行文件)或foobar_LIBADD(在生成库时)列出链接库。

另外,在Makefile.am中运行pkg-config是不必要和浪费的。只需使用:

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

中填充了

configure.ac

PKG_CHECK_MODULES([libglfw], [libglfw])