Флажок линкера находится в неправильном месте - PullRequest
8 голосов
/ 22 ноября 2010

Я пытаюсь использовать 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 Ответ

11 голосов
/ 22 ноября 2010

Вы можете начать, не злоупотребляя LDFLAGS для библиотек. LDFLAGS для компоновщика flags . Используйте foo_LDADD (для исполняемых файлов) или foobar_LIBADD (при создании библиотеки) для вывода списка библиотек ссылок.

Кроме того, запуск pkg-config внутри Makefile.am является ненужным и расточительным. Просто используйте:

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

libglfw_CFLAGS,LIBS заполняется этим в configure.ac:

PKG_CHECK_MODULES([libglfw], [libglfw])

...