2010-01-01 18 views
12

programmo applicazioni C++ su (Ubuntu) Linux e compilarli a 2 sistemi operativi: nativamente per Linux utilizzando "g ++" (compilatore GNU C++) e cross-compilare in di Windows usando "i386-mingw32-g ++" (compilatore incrociato MinGW C++).OpenGL + Mesa 3D + MinGW

Ora, sto provando a compilare cross-comple le applicazioni "OpenGL" (da Linux a Windows) - per questo ho bisogno di alcuni file di libreria OpenGL.
Come implementazione di OpenGL, utilizzo la libreria open source "Mesa 3D". Fortunatamente, Ubuntu offre "precompilati" librerie mesa3d (libgl1-mesa-dev e libglu1-mesa-dev) per Linux, ma purtroppo, non ci sono le librerie precompilate per l'utilizzo con MinGW cross-compilatore (quindi versioni Windows di loro) - quindi I "DEVE" compilarli manualmente "dalla fonte" (che può essere scaricato dalla homepage di http://www.mesa3d.org).

Ma non ho idea di farlo. All'interno del codice sorgente di mesa3d, ci sono alcuni documenti su come costruire le librerie per alcune piattaforme specifiche - in particolare c'è il file readme "README.MINGW32".
Ma solo sulle prime righe c'è qualche comando

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

che non posso correre, perché non ho un programma "mingw32-make" installato. Con altri software, che ho usato per costruirli con il "classico"

./configure -> make -> make install 

procedura, ma questo non sta funzionando su librerie mesa3d.
Per esempio, ho anche provato

./configure --host=i386-mingw32 

ed è stato configurato male, ma dopo aver digitato

make 

si gettò qualche errore

error: #error No PIPE_SUBSYSTEM_WINDOWS_xxx subsystem defined. 

e ora sono perduto: - (

Così qualcuno sa come costruire le librerie mesa3d per li stai usando con mingw32?

P.S .: E, naturalmente, NON VOGLIO di utilizzare Microsoft Visual Studio MAI PIU ':-). E vorrei anche fare tutto il necessario per creare l'ambiente OpenGL da Linux e utilizzare mingw32 per la cross-compiling. Spero sia possibile.

P.S.2: Nella pagina http://www.mesa3d.org/systems.html è scritto che l'utilizzo di MinGW con Mesa 3D è "deprecato". Sono sulla strada giusta per usarlo proprio in quel modo?

+0

Basta chiedersi ... OpenGL viene in genere utilizzato per accedere all'hardware accelerato 3D. Usando mesa su Windows, si ricorre a un'implementazione software su Windows. E 'davvero quello che vuoi? Altrimenti, è sufficiente utilizzare le librerie opengl fornite da Windows. – Bahbar

+0

Il mio obiettivo principale è quello di "architettura indipendente" quando si scrive codice C++ -> quindi ho pensato che usare una libreria multipiattaforma ("mesa3d" in questo caso) è un buon modo per ottenere ciò, non so, forse io ho torto. Quindi dovrei averlo capito in modo che in "ogni Windows" ci siano alcune "librerie" che implementano OpenGL e quando scrivo del codice OpenGL sulla mia macchina Linux, non ho bisogno di distribuire altre librerie OpenGL con il mio programma? In tal caso, quali librerie sono: "opengl.dll", "libopengl.lib" o cosa? – Petike

+0

OpenGL viene solitamente esposto come parte della piattaforma. Per Windows, Microsoft ha distribuito un'interfaccia OpenGL (opengl.lib) nei suoi SDK di piattaforma per sempre. Non sono sicuro di come procederai a costruire .a per il linker mingw, ma è decisamente diverso dall'utilizzo di mesa. – Bahbar

risposta

16

Non è necessario compilare Mesa3D per MinGW. MinGW include la libreria GL; semplicemente non si chiama libGL.alibGLU.a; le librerie sono invece chiamate libopengl32.a e libglu32.a. Purtroppo, questo è ciò che Microsoft ha deciso di chiamarli sotto Windows su Visual Studio, quindi sia la versione Windows che GNU/Linux di MinGW hanno deciso di includere le librerie nominate come sopra.

Così, quando croce compilazione per Windows, basta cambiare:

-lGL -lGLU 

in

-lopengl32 -lglu32 

Mesa3D su GNU/Linux è in realtà un nome per un libre implementazione di OpenGL . Questo perché OpenGL è un marchio e la politica di SGI non ha permesso a nessuno di usare il nome senza pagare una grossa somma di denaro. Nonostante ciò, SGI ha fornito all'autore, Brian Paul, una copia della suite di test.

Mesa3D è sulla maggior parte delle piattaforme con implementazione nativa OpenGL nota come libreria "sanity check" del software con l'emulazione di numerose funzionalità high-end hardware-only. Ma su GNU/Linux, molto più importante è qualcosa chiamato DRI o interfaccia di rendering diretto. Questo è il vero affare, l'accelerazione hardware e tutto. Questa libreria è anche chiamata Mesa3D; infatti, il provisioning per DRI è una parte di Mesa3D e di X11 e del kernel.

Mesa3D fornisce libre intestazioni compatibili con OpenGL su GNU/Linux e altre piattaforme gratuite.

Sommario: Mesa3D è il nome dell'implementazione GNU/Linux di OpenGL poiché tale nome è un marchio. Questa libreria include un'implementazione software eccellente, ricca di funzionalità, corretta e relativamente veloce. Include anche un'interfaccia di rendering diretto per l'accelerazione hardware.

+0

Grazie mille. A proposito, ci sono anche librerie precompilate nel mio gcc "nativo" che ho su Linux o devo usare le librerie mesa3d quando sto compilando per Linux? – Petike

+0

Modifica la mia risposta. –

+1

Non esiste una "versione GNU/Linux di MinGW". Sono due cose separate. MinGW sembra uguale da tutti gli angoli. – rubenvb