开发者

Linker flags in wrong place

开发者 https://www.devze.com 2023-01-26 00:51 出处:网络
I\'m tryi开发者_如何学Pythonng to use Autotools to build my C program that needs to be linked against certain libraries. It only contains one C source file.

I'm tryi开发者_如何学Pythonng to use Autotools to build my C program that needs to be linked against certain libraries. It only contains one C source file.

This is the Makefile.am associated with it:

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

When I run make, it tries to compile it using this:

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

However this is wrong, as the library link flags must be at the end, or else it will give errors about undefined references. For example if I run this:

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

It compiles fine.

How can I make it so the LDFLAGS primary is appended at the end rather than in the middle?


You can start by not abusing LDFLAGS for libraries. LDFLAGS is for linker flags. Use foo_LDADD (for executables) or foobar_LIBADD (when producing a library) to list link libraries.

Also, running pkg-config inside Makefile.am is unnecessary and wasteful. Just use:

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

libglfw_CFLAGS,LIBS is populated by this in configure.ac:

PKG_CHECK_MODULES([libglfw], [libglfw])

0

精彩评论

暂无评论...
验证码 换一张
取 消