118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 334
1

Mingw компиляция по частям

01.03.2019, 16:17. Показов 1555. Ответов 2

Добрый день.

При задумке одного из проектов есть необходимость компиляции отдельных компонентов и последующей сборки компонентов в результирующий выполняемый файл, но возникает одна проблема: "undefined reference to" при сборке результирующего файла.

Собирается все через Makefile с использованием MinGW, и если сами компоненты собираются без каких либо ошибок:

Код
g++ -g3 -O2 -Wall -fno-exceptions -fno-rtti -c -o src/core/coreEngine.o src/core/coreEngine.cpp
g++ -g3 -O2 -Wall -fno-exceptions -fno-rtti -c -o src/core/event.o src/core/event.cpp
g++ -g3 -O2 -Wall -fno-exceptions -fno-rtti -c -o src/main.o src/main.cpp
То с результирующим возникают проблемы:

Код
g++ -g3 -O2 -Wall -Isrc/core -Isrc/physics -Isrc/render -Iinc -Iinc/GL -Llib -w -Wl,-subsystem,windows -lOpenGL32 -lglu32 -lfr
eeglut -o build/test.exe src/core/coreEngine.o src/core/event.o src/main.o
src/core/coreEngine.o: In function `ZN4Core10CoreEngine6renderEv':
d:\MyTest\[OpenGL] EngineTest/src/core/coreEngine.cpp:30: undefined reference to `_imp__glClear@4'
d:\MyTest\[OpenGL] EngineTest/src/core/coreEngine.cpp:32: undefined reference to `_imp__glLoadIdentity@0'
d:\MyTest\[OpenGL] EngineTest/src/core/coreEngine.cpp:34: undefined reference to `gluLookAt@72'
d:\MyTest\[OpenGL] EngineTest/src/core/coreEngine.cpp:38: undefined reference to `_imp__glRotatef@16'
d:\MyTest\[OpenGL] EngineTest/src/core/coreEngine.cpp:41: undefined reference to `_imp__glColor3f@12'
d:\MyTest\[OpenGL] EngineTest/src/core/coreEngine.cpp:42: undefined reference to `_imp__glBegin@4'
d:\MyTest\[OpenGL] EngineTest/src/core/coreEngine.cpp:43: undefined reference to `_imp__glVertex3f@12'
d:\MyTest\[OpenGL] EngineTest/src/core/coreEngine.cpp:46: undefined reference to `_imp__glEnd@0'
d:\MyTest\[OpenGL] EngineTest/src/core/coreEngine.cpp:49: undefined reference to `_imp__glutSwapBuffers@0'
src/main.o: In function `glutInit_ATEXIT_HACK':
d:\MyTest\[OpenGL] EngineTest/src/../inc/GL/freeglut_std.h:637: undefined reference to `_imp____glutInitWithExit@12'
src/main.o: In function `main':
d:\MyTest\[OpenGL] EngineTest/src/main.cpp:20: undefined reference to `_imp__glutInitDisplayMode@4'
d:\MyTest\[OpenGL] EngineTest/src/main.cpp:21: undefined reference to `_imp__glutInitWindowPosition@8'
d:\MyTest\[OpenGL] EngineTest/src/main.cpp:22: undefined reference to `_imp__glutInitWindowSize@8'
src/main.o: In function `glutCreateWindow_ATEXIT_HACK':
d:\MyTest\[OpenGL] EngineTest/src/../inc/GL/freeglut_std.h:639: undefined reference to `_imp____glutCreateWindowWithExit@8'
src/main.o: In function `main':
d:\MyTest\[OpenGL] EngineTest/src/main.cpp:28: undefined reference to `_imp__glutDisplayFunc@4'
d:\MyTest\[OpenGL] EngineTest/src/main.cpp:30: undefined reference to `_imp__glutMainLoop@0'
collect2.exe: error: ld returned 1 exit status
make: *** [build/test.exe] Error 1
Судя по ошибке библиотеки libfreeglut.a он находит.
Не могу понять в чем проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2019, 16:17
Ответы с готовыми решениями:

Компиляция в g++ из MinGW
Добрый день! После скачивания и установки MinGW пытаюсь скомпилировать простую программу из...

MinGW-w64 компиляция
Проблема не могу скомпилировать код под x64 пробовал с ключом -m64 выдаёт ошибку "sorry,...

Компиляция в MSYS (MinGW)
Всем приветы! Подскажите, есть папка с примерами, там makefile. Я в MSYS захожу в эту папку и...

Компиляция серьезной графики под Mingw
Возьмем для примера gdi+ (c всем остальным у меня получалось абсолютно тоже. только winapi из...

2
889 / 348 / 78
Регистрация: 17.05.2015
Сообщений: 1,134
01.03.2019, 17:23 2
Цитата Сообщение от darksector Посмотреть сообщение
Не могу понять в чем проблема?
Интернеты пишут:

For the linker error: You have to change the order of linked libraries. freeglut has to be in the list before opengl32.
g++ "-LC:\\MinGW\\freeglut\\lib\\x64 \\Debug" -o spinningCube.exe main.o -lfreeglut -lglu32 -lopengl32
1
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 334
01.03.2019, 18:27  [ТС] 3
Цитата Сообщение от eva2326 Посмотреть сообщение
Интернеты пишут:
Да, по логике зависимостей так действительно будет правильней писать, но проблема оказалось не в этом, а в том, что существует строгая последовательность линковки:

Код
g++ -Isrc/core -Isrc/physics -Isrc/render -Iinc -Iinc/GL -Llib -w -Wl,-subsystem,windows src/core/coreEngine.o src/core/event.o src/main.o -lOpenGL32 -lglu32 -lfreeglut -o build/test.exe
Т.е. рабочий вариант:

Код
$(TARGET): $(OBJECTS)
	$(CXX) $(INCDIRS) $(LIBIRS) $(COMPILER_FLAGS) $^ $(LIBRARIES) -o $@
Был нерабочий:

Код
$(TARGET): $(OBJECTS)
	$(CXX) $(INCDIRS) $(LIBDIRS) $(COMPILER_FLAGS) $(LIBRARIES) -o $@ $^
Другими словами *.obj файлы должны идти до линковочных. Источник.

Спасибо за помощь.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2019, 18:27
Помогаю со студенческими работами здесь

Компиляция кода с SDL2 под Windows в MinGW
У меня виндовс семь, система 64битная. Компилятор брал сравнительно недавно (после перестановки...

Может ли MinGW x64 компилить приложения x32? Или нужно для этого отдельно ещё MinGW х32 качать?
Просто решил поиграться с CodeLite.

Mingw-w64 MinGW TDM-GCC
Всем привет. Хочу понять, существует ли принципиальная разница между Mingw-w64, MinGW и...

Кросс-компиляция opengl в mingw-w64
Есть программа на SDL и OpenGL. В Makefile я прописываю все пути к либам. И всё собирается под...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru