Как изменить порядок в CXXLINK от AutoMake?
Я пытаюсь скомпилировать простую программу на C++ с помощью инструментов automake. Сами по себе automake создает в своем Makefile строку: CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@
Таким образом, однако, я получаю некоторые ошибки компоновщика, которые могут быть решены, просто поместив -o example example.cpp
часть в начале команды g++ вместо конца.
Как я могу поручить автопроизводителю поставить -o example example.cpp
перед компоновщиком команд?
Здесь Makefile.am
bin_PROGRAMS = GLTest
GLTest_SOURCES = main.cpp
AM_CXXFLAGS=@gllibs_CFLAGS@ -std=c++11 -pthread
AM_LDFLAGS=@gllibs_LIBS@ -lGL -lGLEW -lglfw -lX11 -lXi -lXrandr
Вот ошибки компоновщика:
g++ -I/usr/include/libdrm -std=c++11 -pthread -g -O2 -lGLEW -lGLU -lGL -lglfw -lGL -lGLEW -lglfw -lX11 -lXi -lXrandr -o GLTest main.o
main.o: In function `main':
main.cpp:8: undefined reference to `glfwInit'
main.cpp:9: undefined reference to `glfwWindowHint'
main.cpp:10: undefined reference to `glfwWindowHint'
main.cpp:11: undefined reference to `glfwWindowHint'
main.cpp:12: undefined reference to `glfwWindowHint'
main.cpp:14: undefined reference to `glfwCreateWindow'
collect2: error: ld returned 1 exit status
Они решаются, когда я компилирую его вручную следующим образом:
g++ -o GLTest main.cpp -I/usr/include/libdrm -std=c++11 -pthread -g -O2 -lGLEW -lGLU -lGL -lglfw -lGL -lGLEW -lglfw -lX11 -lXi -lXrandr
2 ответа
Из команды компоновщика в выводе выглядит, что вы не используете libtool
,
Попробуйте добавить AM_PROG_LIBTOOL
к configure.ac
,
Ты делаешь это неправильно. Проблема в том, что вы передаете библиотеки как LDFLAGS
и это неверно.
У тебя должно быть
GLTest_LDADD = $(gllibs_LIBS)
так что вы говорите automake правильно, что это библиотеки.
Использование libtool может работать, в зависимости от используемой версии libtool, так как он может сортировать командную строку, но это все равно неправильно, и в других ситуациях происходит сбой.