2012-05-10 3 views
7

Это было задано довольно много раньше: Как скомпилировать источник GLEW 1.7.0 для Windows с помощью MinGW? Цель состоит в том, чтобы динамически связывать библиотеку с проектом C++.Building GLEW 1.7.0 для Windows с использованием MinGW

Дополнительная информация: Я работаю с QtCreator, ergo использует qmake для строительства. Я нахожусь в Windows 7. К настоящему моменту я попытался/посмотрел на следующие ссылки.

use posted batch file also tried to replace gcc with g++

static with vc++ libs, build dll.a reuse vc++ .dll

Get MSYS run shipped makefile

Info on initial issues

simple stuff using GLEW msvc++ binaries, works on my desktop

Unfortuantely все размещенные решения заканчиваются в следующих сообщений об ошибках для меня, когда я использую скомпилированные результаты в моей Projec t:

undefined reference to `[email protected]' 
debug/Ex04.o: In function `Z6initGLv': 
undefined reference to `[email protected]' 
undefined reference to `[email protected]' 
debug/Ex04.o: In function `Z8updateGLv': 
undefined reference to `[email protected]' 
undefined reference to `[email protected]' 
collect2: ld returned 1 exit status 
mingw32-make.exe[1]: *** [debug/ecg4.exe] Error 1 
mingw32-make.exe: *** [debug] Error 2 

Я в конце своего ума рассматриваю эту проблему. Я дважды и тройной проверил путь LIBS в qmake и переменную пути к Windows, чтобы включить каталог, в котором находится glew dll. Также INCLUDEPATH qmake должен быть в порядке. Здесь пути в файле .pro Любом:

LIBS += -L$$quote(C:/mypath/freeglut/lib/) -lfreeglut 
LIBS += -L$$quote(C:/mypath/glew-1.7.0/lib/) -lglew32 -lglew32mx 
#LIBS+= C:/mypath/glew-1.7.0/lib/libglew32.dll.a 
#LIBS+= C:/Programming/glew-1.7.0/lib/libglew32mx.dll.a 

#includepath for project and the required libraries 
INCLUDEPATH += ./include 
INCLUDEPATH += "C:/mypath/glew-1.7.0/include" 
INCLUDEPATH += "C:/mypath/freeglut/include" 

Так есть кто-то, кто мог бы дать ошибкоустойчивый набор инструкций о том, как получить 1.7.0 источник GLEW скомпилированный с MinGW?

ответ

12

Хорошо, я решил.

В основном я правильно скомпилировал GLEW, насколько я могу судить. Я забыл добавить -lopengl32 -lglu32 к пути LIBS в моем проекте. По какой-то причине мне нужно сделать это в моей системе Qt/MinGW/Windows. На моем рабочем столе: Qt/VC++/Windows мне не нужно это делать. У кого-нибудь есть объяснение?

Для тех, кто наткнуться на одной и той же проблемой:

  1. Скачать исходный (.zip) от GLEW homepage
  2. Компиляция источник, существуют различные способы (ср ссылки на первоначальный вопрос)
    -> см bottom (старый пакетный файл уже не работает на github)
  3. Поместите файлы .dll.a в каталог, который будет частью вашего пути LIBS в qmake
  4. Положите.DLL-файлы в директорию, которая является частью systemvariable PATH
  5. Не забудьте связать с OPENGL, гл, GLEW в вашем QMAKE файл проект

Вот отрывок из моего файла проекта:

#Required Libraries, replace with your path 
# $$quote(...) for quoting pathes with spaces 

LIBS += -L$$quote(C:/Programming/freeglut/lib/) -lfreeglut 
LIBS += -L$$quote(C:/Programming/glew-1.7.0/lib/) -lglew32 -lglew32mx 
# the following line is not necessary when working with VS compiler, odd 
LIBS += -lopengl32 -lglu32 

#includepath for project and the required libraries 
INCLUDEPATH += ./include 
INCLUDEPATH += "C:/Programming/glew-1.7.0/include" 
INCLUDEPATH += "C:/Programming/freeglut/include" 

в любом случае спасибо большое, может быть, это помогает некоторым людям не забыть о зависимостях :)

Приветствия, Moritz


Edit: Пакетный файл не вверх больше, и я просто должен был составить Glew 1.9.0. Так вот еще некоторые примечания:

  1. Убедитесь, что ar.exe и gcc.exe находятся на вашем пути. Для «стандартной установки QtSDK» эти программы можно найти в C: \ QtSDK \ mingw \ bin;
  2. Поместите следующие строки в пакетный файл в папке glew-1.x.y. Это сжатая версия LightningIsMyName's Answer

    gcc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.o -c src/glew.c 
    gcc -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.dll.a -o lib/glew32.dll src/glew.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32 
    ar cr lib/libglew32.a src/glew.o 
    
    gcc -DGLEW_NO_GLU -DGLEW_MX -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.mx.o -c src/glew.c 
    gcc -shared -Wl,-soname,libglew32mx.dll -Wl,--out-implib,lib/libglew32mx.dll.a -o lib/glew32mx.dll src/glew.mx.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32 
    ar cr lib/libglew32mx.a src/glew.mx.o 
    
  3. Запустите пакетный файл. Результаты будут в папке lib /. Результирующие файлы .dll и .dll.a идут вместе (.dll.a - это то, о чем вы хотите сообщить своему компоновщику, .dll должна быть доступна системе во время выполнения). Файлы .a предназначены для статической привязки.

+1

Спасибо за подсказку, я подробно остановился на ответе и принял его. –

+0

Я отредактировал ответ, чтобы удалить неработающую ссылку и заменить утерянную информацию. Надеюсь, теперь это не слишком захламлено. –

Смежные вопросы