web-dev-qa-db-fra.com

Construire glew sur les fenêtres avec mingw

Quelqu'un peut-il me donner la bonne commande pour construire glew sur windows avec mingw?

J'ai essayé:

gcc -static glew.c glewinfo.c visualinfo.c -I/path/to/glew/include

mais je reçois des milliers d'erreurs de l'éditeur de liens (référence manquante).

Je ne peux pas construire avec Make car malheureusement le makefile a beaucoup de commandes Unix et je n'ai pas cygwin ou quoi que ce soit au travail.

(Sinon, si quelqu'un peut me pointer vers une version Windows 32b, je serais très reconnaissant)

28
user181351

Pour le construire avec MinGW, vous devez faire (copié à partir du journal de fabrication, avec de légères modifications et des explications supplémentaires):

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

Vous devriez alors avoir un dossier lib et un dossier bin avec les exécutables et bibliothèques souhaités

47
Barak Itkin

Je l'ai fait fonctionner (avec MinGW), je n'ai pas compilé le glew32mx mais glew32 à la place. Téléchargez simplement la source .Zip sur le site Web de GLEW. Et n'oubliez pas de créer le répertoire "lib" dans le répertoire glew-1.xx, sinon il se plaindra de "impossible de trouver /lib/glew32.dll" lors de la compilation de la deuxième ligne de code ci-dessous:

    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

Les binaires précompilés dans le site Web GLEW ne fonctionnent pas avec mingw, car ils sont compilés avec Visual Studio, je pense.

17
anon

Trouvé une autre solution qui fonctionne avec Code :: Blocks. Pas:

1) De toute évidence, vous aurez besoin du code source glew;)

2) Ouvrez les fichiers glew_shared.dsw avec C :: B, modifiez les propriétés du projet et, pour chaque cible de génération dont vous avez besoin, changez son type de "Bibliothèque dynamique" en "Bibliothèque statique" (c'est là, dans l'onglet Cibles de construction). Vous pouvez également modifier le répertoire de destination car les fichiers .dll sont intégrés dans le répertoire bin \.

3) Ajoutez #define GLEW_STATIC avant #include

4) Construisez la cible et cela entraînera la création de libglew32 * .a approprié

6
PoL0

Glew build system essaie de détecter automatiquement votre environnement en utilisant config/configure.guess. Vous pouvez surcharger ce comportement en spécifiant $SYSTEM faire. Voir config/Makefile.* pour toutes les configurations de build prises en charge. Glew inclut déjà la configuration pour utiliser MinGW.

Donc, vous devrez peut-être simplement lancer:

make SYSTEM=linux-mingw64

Sur ma Fedora, j'ai dû régler certaines variables de config/Makefile.linux-mingw64:

  • $CC et $LD n'était pas correct
  • J'ai dû spécifier le répertoire où se trouvaient les bibliothèques système
  • J'ai dû spécifier où glew devait être installé

Enfin, j'ai lancé:

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
5
Jezz

Suite à la réponse de PoL0, j'ai trouvé que ces étapes fonctionnaient pour moi avec MinGW sur Code :: Blocks mais avec une autre modification requise - le projet par défaut a beaucoup de bêtises Microsoft définies dans les "autres options" sous les options du compilateur. Effacez-les et vous obtiendrez un bon résultat (options de construction de projet -> [chaque cible] -> onglet des paramètres du compilateur -> sous-onglet d'autres options)

Vous pouvez également souhaiter activer l'optimisation pour les deux cibles de version (-O2 ou -O3).

De plus, les bibliothèques statiques seront construites dans "bin" par défaut, vous devrez les copier/déplacer pour remplacer celles de "lib".

1
Riot

Voici comment VLC construit glew (statique) sur mingw:

https://github.com/videolan/vlc/tree/master/contrib/src/glew (ils appliquent ce patch). Je suppose que glew n'a pas d'option facile pour "simplement" construire une bibliothèque statique, vous devez donc passer par différents obstacles (ou compiler manuellement, comme les autres réponses font allusion).

Voir aussi http://en.wikibooks.org/wiki/OpenGL_Programming/Installation/Windows#GLEW

et l'étape 7 ici: http://sujatha-techie.blogspot.com/2008/10/glsl-with-mingw.html

C'est ainsi que mx le fait: https://github.com/mxe/mxe/blob/master/src/glew.mk (on dirait qu'ils construisent tout simplement manuellement tout, le Makefile de glew semble faible. ..)

1
rogerdpack

si vous avez installé MingW, exécutez simplement Msys et faites et installez-y une fois que vous avez terminé de copier les bibliothèques et d'inclure des dossiers dans les bibliothèques bin et d'inclure des dossiers dans MingW et tout devrait bien fonctionner

solution simple et rapide

0
hopjopper

Je crois que le principal site Web de Glew a un lien vers les binaires sur la page d'accueil, pour 2 bits et 64 bits les systèmes Windows.

0
Barak Itkin