Флажок линкера находится в неправильном месте
Я пытаюсь использовать 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 ответ
Вы можете начать, не злоупотребляя LDFLAGS для библиотек. LDFLAGS для флагов компоновщика. Используйте 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])