2016-08-09 7 views
0

Я пытаюсь скомпилировать простую программу на C++ с помощью инструментов automake. Сам по себе, Automake создает в Makefile линии: CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o [email protected]Как изменить порядок в CXXLINK automake?

Таким образом, однако, я получаю некоторые ошибки линкера, которые могут быть решены просто положить -o example example.cpp части в начале команды г ++ вместо конца.

Как я могу указать automake поставить -o example example.cpp перед командами компоновщика?

Вот Makefile.am

bin_PROGRAMS = GLTest 

GLTest_SOURCES = main.cpp 

[email protected][email protected] -std=c++11 -pthread 
[email protected][email protected] -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 
+1

Как выглядит ваш 'Makefile.am'? – Galik

+0

Это мой 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' – Kadabash

+0

Как установить '@ gllibs_LIBS @'? Вместо этого вы пытались использовать '$ (gllibs_LIBS)'? Вы посмотрели на 'PKG_CHECK_MODULES', чтобы найти библиотеки GL/X11 и т. Д.? – Galik

ответ

0

Из команды линкера в выводе кажется, что вы не используете libtool.

Попробуйте добавить AM_PROG_LIBTOOL на номер configure.ac.

2

Вы делаете это неправильно. Проблема в том, что вы передаете библиотеки как LDFLAGS, и это неверно.

Вы должны

GLTest_LDADD = $(gllibs_LIBS) 

так, что вы говорите Automake правильно, что те библиотеки.

Использование libtool may Работает, в зависимости от используемой версии libtool, поскольку она может сортировать командную строку, но в других ситуациях это все еще не так, как нужно.