2010-01-01 7 views
12

Je programme des applications C++ sous Linux (Ubuntu) et les compiles 2 systèmes d'exploitation: en mode natif à Linux en utilisant "g ++" (compilateur GNU C++) et les cross-compilation à de Windows en utilisant "i386-mingw32-g ++" (compilateur croisé MinGW C++).OpenGL + Mesa 3D + MinGW

Maintenant, j'essaie de compiler des applications "OpenGL" (de Linux à Windows) - pour cela j'ai besoin de fichiers de bibliothèque OpenGL.
En tant qu'implémentation d'OpenGL, j'utilise la bibliothèque open source "Mesa 3D". Heureusement, Ubuntu propose des bibliothèques "précompilées" mesa3d (libgl1-mesa-dev et libglu1-mesa-dev) pour Linux, mais malheureusement, il n'y a pas de bibliothèques précompilées à utiliser avec le compilateur croisé MinGW (donc les versions Windows de eux) - donc je "DOIT" les compiler manuellement "à partir de la source" (qui peut être téléchargé à partir de http://www.mesa3d.org page d'accueil).

Mais je n'ai aucune idée de le faire. Dans le code source mesa3d, il y a quelques documents sur la façon de construire les bibliothèques pour certaines plates-formes spécifiques - en particulier il y a le fichier readme "README.MINGW32".
Mais sur les premières lignes il y a une commande

mingw32-make -f Makefile.mgw [OPTIONS...] 

que je ne peux pas courir parce que je n'ai pas programme « mingw32-make » sont installés. En d'autres logiciels, je les construire avec le « classique »

./configure -> make -> make install 
procédure

, mais cela ne fonctionne pas sur les bibliothèques mesa3d.
Par exemple, j'ai aussi essayé

./configure --host=i386-mingw32 

et il a été configuré ok, mais après avoir tapé

make 

il a jeté une erreur

error: #error No PIPE_SUBSYSTEM_WINDOWS_xxx subsystem defined. 

et maintenant je suis perdu: - (

Alors quelqu'un sait-il comment construire les bibliothèques mesa3d pour r les utiliser avec mingw32?

P.S .: Et bien sûr, JE NE VEUX PAS utiliser Microsoft Visual Studio Plus jamais :-). Et aussi je voudrais faire tout le nécessaire pour construire l'environnement OpenGL à partir de Linux et utiliser mingw32 pour la compilation croisée. J'espère que c'est possible.

P.S.2: Sur la page http://www.mesa3d.org/systems.html, il est écrit que l'utilisation de MinGW avec Mesa 3D est "obsolète". Je suis sur le bon chemin pour l'utiliser comme ça?

+0

Je me demandais ... OpenGL est généralement utilisé pour accéder à la 3D accélérée par le matériel. En utilisant mesa sur windows, vous avez recours à une implémentation logicielle sur windows. Est-ce vraiment ce que tu veux? Sinon, il suffit d'utiliser les librairies opengl fournies par windows. – Bahbar

+0

Mon objectif principal est d'être "indépendant de l'architecture" en écrivant du code C++ -> donc je pensais que l'utilisation d'une bibliothèque multiplateforme ("mesa3d" dans ce cas) est un bon moyen d'y parvenir, je ne sais pas je me trompe. Donc dois-je comprendre que dans "chaque Windows" il y a des "bibliothèques" qui implémente OpenGL et quand j'écris du code OpenGL sur ma machine Linux, je n'ai pas besoin de distribuer de bibliothèques OpenGL supplémentaires avec mon programme? Si oui, quelles bibliothèques sont - "opengl.dll", "libopengl.lib" ou quoi? – Petike

+0

OpenGL est généralement exposé dans le cadre de la plate-forme. Pour Windows, Microsoft a envoyé une interface OpenGL (opengl.lib) dans ses SDK de plate-forme pour toujours. Je ne sais pas exactement comment vous allez construire un .a pour mingw linker hors de ceux-ci, mais il est certainement différent d'utiliser mesa. – Bahbar

Répondre

16

Il n'est pas nécessaire de compiler Mesa3D pour MinGW. MinGW inclut la bibliothèque GL; il n'est simplement pas appelé libGL.a ni libGLU.a; les bibliothèques sont à la place appelées libopengl32.a et libglu32.a. Malheureusement, c'est ce que Microsoft a décidé de les appeler sous Windows sur Visual Studio, donc les versions Windows et GNU/Linux de MinGW ont décidé d'inclure les bibliothèques nommées ci-dessus.

Ainsi, lors de la compilation pour Windows, il suffit de changer:

-lGL -lGLU 

dans

-lopengl32 -lglu32 

Mesa3D sur GNU/Linux est en fait un nom pour un libre mise en œuvre d'OpenGL . C'est parce que OpenGL est une marque de commerce, et la politique de SGI ne permettait à personne d'utiliser le nom sans payer une grosse somme d'argent. Malgré cela, SGI a fourni à l'auteur, Brian Paul, une copie de la suite de tests. Mesa3D est sur la plupart des plates-formes avec une implémentation OpenGL native connue sous le nom de bibliothèque de "vérification de la santé" avec l'émulation de nombreuses fonctionnalités haut de gamme uniquement matérielles. Mais sur GNU/Linux, beaucoup plus important est ce qu'on appelle DRI ou interface de rendu direct. C'est la vraie affaire, l'accélération matérielle et tout. Cette bibliothèque est également appelée Mesa3D; en fait, l'approvisionnement pour DRI fait partie de Mesa3D ainsi que de X11 et du noyau.

Mesa3D fournit libre En-têtes compatibles OpenGL sur GNU/Linux et autres plateformes libres.

Résumé: Mesa3D est le nom de l'implémentation GNU/Linux d'OpenGL depuis que ce nom est déposé. Cette bibliothèque comprend une excellente implémentation logicielle, fonctionnelle, correcte et relativement rapide. Il comprend également une interface de rendu direct pour l'accélération matérielle.

+0

Merci beaucoup. Par ailleurs, y a-t-il aussi des bibliothèques précompilées dans mon gcc "natif" que j'ai sur Linux ou est-ce que je dois utiliser des bibliothèques mesa3d quand je compile pour Linux? – Petike

+0

Je vais modifier ma réponse. –

+1

Il n'existe pas de "version GNU/Linux de MinGW". Ils sont deux choses séparées. MinGW regarde la même chose sous tous les angles. – rubenvb