链接器标志在错误的地方

kay*_*kun 8 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`
Run Code Online (Sandbox Code Playgroud)

当我运行make时,它尝试使用以下方法编译它:

gcc `pkg-config --cflags libglfw` -g -O2 `pkg-config --libs libglfw`  -o game game-main.o
Run Code Online (Sandbox Code Playgroud)

但是这是错误的,因为库链接标志必须在最后,否则它将给出有关未定义引用的错误.例如,如果我运行这个:

gcc `pkg-config --cflags libglfw` -g -O2   -o game game-main.o `pkg-config --libs libglfw`
Run Code Online (Sandbox Code Playgroud)

它汇编很好.

我怎样才能使LDFLAGS primary在末尾而不是在中间附加?

use*_*515 11

您可以从不滥用LDFLAGS的库开始.LDFLAGS用于链接器标志.使用foo_LDADD(可执行文件)或foob​​ar_LIBADD(产生库时)列出链接库.

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

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

libglfw_CFLAGS,LIBS由此填充configure.ac:

PKG_CHECK_MODULES([libglfw], [libglfw])

  • 后续:对于常规的makefile,解决方案是使用LOADLIBES = -lm而不是LDFLAGS = -lm。 (2认同)