Здание мерцало на окнах с минг
Кто-нибудь может дать мне правильную команду для сборки glew на windows с mingw?
Я пытался:
gcc -static glew.c glewinfo.c visualinfo.c -I / path / to / glew / include
но я получаю тысячи ошибок компоновщика (отсутствует ссылка).
Я не могу собрать с Make, потому что, к сожалению, в make-файле много команд только для unix, и у меня нет cygwin или чего-то еще на работе.
(В качестве альтернативы, если кто-то может указать мне на сборку Windows 32B, я был бы очень признателен)
8 ответов
Чтобы собрать его с помощью MinGW, вы должны сделать (скопировано из журнала make, с небольшими изменениями и дополнительными пояснениями):
mkdir lib/
mkdir bin/
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
# Create library file: lib/libglew32.dll.a
ar cr lib/libglew32.a src/glew.o
# Create pkg-config file (optional if you just want a lib)
sed \
-e "s|@prefix@|/usr|g" \
-e "s|@libdir@|/usr/lib|g" \
-e "s|@exec_prefix@|/usr/bin|g" \
-e "s|@includedir@|/usr/include/GL|g" \
-e "s|@version@|1.6.0|g" \
-e "s|@cflags@||g" \
-e "s|@libname@|GLEW|g" \
< glew.pc.in > glew.pc
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
# Create library file: lib/libglew32mx.dll.a
ar cr lib/libglew32mx.a src/glew.mx.o
# Create pkg-config file (optional if you just want a lib)
sed \
-e "s|@prefix@|/usr|g" \
-e "s|@libdir@|/usr/lib|g" \
-e "s|@exec_prefix@|/usr/bin|g" \
-e "s|@includedir@|/usr/include/GL|g" \
-e "s|@version@|1.6.0|g" \
-e "s|@cflags@|-DGLEW_MX|g" \
-e "s|@libname@|GLEWmx|g" \
< glew.pc.in > glewmx.pc
# Make the glew visualinfo program. Skip this if you want just the lib
gcc -c -O2 -Wall -W -Iinclude -o src/glewinfo.o src/glewinfo.c
gcc -O2 -Wall -W -Iinclude -o bin/glewinfo.exe src/glewinfo.o -Llib -lglew32 -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
gcc -c -O2 -Wall -W -Iinclude -o src/visualinfo.o src/visualinfo.c
gcc -O2 -Wall -W -Iinclude -o bin/visualinfo.exe src/visualinfo.o -Llib -lglew32 -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
После этого у вас должна быть папка lib и папка bin с нужными исполняемыми файлами и библиотеками.
Я получил это работает (с MinGW), я не скомпилировал glew32mx, но вместо этого glew32. Просто скачайте исходный файл.zip с сайта GLEW. И не забудьте создать каталог "lib" в каталоге glew-1.xx, в противном случае он будет жаловаться на "not find /lib/glew32.dll" при попытке скомпилировать вторую строку кода ниже:
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
# Create glew32.dll
ar cr lib/libglew32.a src/glew.o
Предварительно скомпилированные двоичные файлы на веб-сайте GLEW не работают с mingw, потому что я думаю, что они скомпилированы с Visual Studio.
Система сборки Glew пытается автоматически определить вашу среду, используя config/configure.guess
, Вы можете перегрузить это поведение, указав $SYSTEM
делать. Увидеть config/Makefile.*
для всех поддерживаемых конфигураций сборки. Glew уже включает конфигурацию для использования MinGW.
Так что, возможно, вам просто нужно запустить:
make SYSTEM=linux-mingw64
На моей Fedora мне пришлось настроить некоторые переменные config/Makefile.linux-mingw64
:
$CC
а также$LD
было не правильно- Мне пришлось указать каталог, в котором располагались системные библиотеки
- Я должен был указать, где должен быть установлен Glew
Наконец я запустил:
make SYSTEM=linux-mingw64 \
CC=x86_64-w64-mingw32-gcc LD=x86_64-w64-mingw32-ld \
LDFLAGS.EXTRA=-L/usr/x86_64-w64-mingw32/sys-root/mingw/lib \
GLEW_DEST=/usr/x86_64-w64-mingw32/sys-root/mingw install
Нашел другое решение, которое работает с Code::Blocks. шаги:
1) Очевидно, вам понадобится glew исходный код;)
2) Откройте файлы glew_shared.dsw с помощью C::B, отредактируйте свойства проекта и, для каждой цели сборки, измените ее тип с "Динамическая библиотека" на "Статическая библиотека" (она находится прямо здесь, на вкладке "Цели сборки"). Вы также можете изменить каталог назначения, поскольку файлы DLL встроены в каталог bin\.
3) Добавьте #define GLEW_STATIC перед #include
4) Постройте цель, и это приведет к созданию правильной libglew32*.a.
В дополнение к ответу PoL0, я обнаружил, что эти шаги сработали для меня с MinGW на Code::Blocks, но с одним дополнительным изменением, которое требуется - в проекте по умолчанию много "вздора" от Microsoft в "других параметрах" в параметрах компилятора. Очистите их, и вы получите хороший результат (параметры сборки проекта -> [каждая цель] -> вкладка настроек компилятора -> вложенная вкладка других параметров)
Вы также можете включить оптимизацию для двух целей выпуска (-O2 или -O3).
Кроме того, статические библиотеки будут встроены в "bin" по умолчанию, вам нужно будет скопировать / переместить их, чтобы заменить библиотеки в "lib".
Вот как VLC собирает glew (static) на mingw:
https://github.com/videolan/vlc/tree/master/contrib/src/glew (они применяют этот патч). Думаю, у glew нет простого варианта "просто" построить статическую библиотеку, поэтому вам придется преодолевать различные препятствия (или компилировать вручную, как на это указывают другие ответы).
Смотрите также http://en.wikibooks.org/wiki/OpenGL_Programming/Installation/Windows
и шаг 7 здесь: http://sujatha-techie.blogspot.com/2008/10/glsl-with-mingw.html
Вот как это делает mx: https://github.com/mxe/mxe/blob/master/src/glew.mk (похоже, они в основном просто все вручную строят, Makefile в glew кажется слабым...)
Если у вас установлен MingW, просто запустите Msys, сделайте и сделайте установку там после завершения копирования библиотек и включения папок в библиотеки bin и включения папок в MingW, и все должно работать нормально.
простое и быстрое решение