2010-01-01 17 views
12

Mam program C++ aplikacje na (Ubuntu) Linux i skompilować je do 2 systemami operacyjnymi: natywnie do Linux za pomocą "g ++" (GNU C++ kompilator) i cross-kompilacji ich do Okna za pomocą "i386-mingw32-g ++" (kompilator krzyżowy MinGW C++).OpenGL + Mesa 3D + MinGW

Teraz próbuję cross-kompilować aplikacje "OpenGL" (od Linuksa do Windowsa) - do tego potrzebuję plików bibliotecznych OpenGL.
Jako implementację OpenGL używam biblioteki open source "Mesa 3D". Na szczęście Ubuntu oferuje "prekompilowane" biblioteki mesa3d (libgl1-mesa-dev i libglu1-mesa-dev) dla Linuksa, ale niestety, nie ma żadnych prekompilowanych bibliotek do użycia z kompilatorem krzyżowym MinGW (a zatem wersje systemu Windows im) - więc "MUSZĘ" ręcznie skompilować je "ze źródła" (które można pobrać ze strony domowej http://www.mesa3d.org).

Ale nie mam pojęcia, aby to zrobić. W kodzie źródłowym mesa3d znajduje się kilka dokumentów, jak budować biblioteki dla określonych platform - konkretnie plik readme "README.MINGW32".
Ale tylko na pierwszej linii jest jakaś komenda

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

którego nie można uruchomić, ponieważ nie mam żadnego programu „mingw32-make” zainstalowany. Przez inne oprogramowanie, kiedyś zbudować je z „klasyczną” procedury

./configure -> make -> make install 

, ale to nie działa na bibliotekach mesa3d.
Na przykład Próbowałem również

./configure --host=i386-mingw32 

i został skonfigurowany ok, ale po wpisaniu

make 

to rzucił jakiś błąd

error: #error No PIPE_SUBSYSTEM_WINDOWS_xxx subsystem defined. 

i teraz jestem zgubiony: - (.)

Czy ktoś wie, jak zbudować biblioteki mesa3d dla r używając ich z mingw32?

P.S .: I oczywiście NIE CHCĘ w użyciu Microsoft Visual Studio nigdy więcej :-). A także chciałbym zrobić wszystkie wymagane rzeczy, aby zbudować środowisko OpenGL z Linuksa i używając mingw32 do kompilacji krzyżowej. Mam nadzieję, że to możliwe.

P.S.2: Na stronie http://www.mesa3d.org/systems.html jest napisane, że użycie MinGW z Mesa 3D jest "przestarzałe". Jestem na dobrej drodze, by użyć go w ten sposób?

+0

Zastanawiam się ... OpenGL jest zwykle używany do dostępu do akcelerowanego 3D sprzętu. Korzystając z mesy w oknach, uciekasz się do wdrożenia oprogramowania w systemie Windows. Czy to naprawdę chcesz? W przeciwnym razie wystarczy skorzystać z bibliotek OpenGL z systemem Windows. – Bahbar

+0

Moim głównym celem jest bycie "niezależnym od architektury" przy pisaniu kodu C++ -> dlatego uważam, że używanie biblioteki międzyplatformowej ("mesa3d" w tym przypadku) jest dobrym sposobem na osiągnięcie tego, nie wiem, może ja mylę się. Czy powinienem to zrozumieć, aby w "każdym systemie Windows" były jakieś "biblioteki", które implementują OpenGL i kiedy piszę kod OpenGL na moim komputerze z Linuksem, nie muszę dystrybuować żadnych dodatkowych bibliotek OpenGL z moim programem? Jeśli tak, które biblioteki to - "opengl.dll", "libopengl.lib" lub co? – Petike

+0

OpenGL jest zwykle eksponowany jako część platformy. W przypadku systemu Windows firma Microsoft od zawsze dostarcza interfejs OpenGL (opengl.lib) w pakietach SDK platformy. Nie jestem do końca pewien, w jaki sposób budujesz .a na linker z tych, ale zdecydowanie różni się od używania mesy. – Bahbar

Odpowiedz

16

Nie ma potrzeby kompilowania Mesa3D dla MinGW. MinGW zawiera bibliotekę GL; to po prostu nie nazywa się libGL.a ani libGLU.a; biblioteki są nazywane libopengl32.a i libglu32.a. Niestety, to właśnie Microsoft zdecydował się nazywać je Windows pod Visual Studio, więc zarówno wersja systemu Windows, jak i GNU/Linux MinGW zdecydowała się dołączyć biblioteki o nazwach jak wyżej.

Więc, kiedy krzyż kompilacji dla Windows, wystarczy zmienić:

-lGL -lGLU 

do

-lopengl32 -lglu32 

Mesa3D na GNU/Linux jest rzeczywiście nazwę dla libre realizacji OpenGL . Wynika to z faktu, że OpenGL jest znakiem towarowym, a zasady SGI nie pozwalały nikomu używać tej nazwy bez sporej sumy pieniędzy. Mimo to SGI dostarczyło autorowi, Brianowi Paulowi, kopię zestawu testowego.

Mesa3D jest na większości platform z natywną implementacją OpenGL znaną jako programowa "biblioteka sprawdzania poprawności" z emulacją wielu zaawansowanych funkcji sprzętowych. Ale w systemie GNU/Linux znacznie ważniejsze jest coś, co nazywa się DRI lub bezpośrednim interfejsem renderowania. To jest prawdziwa okazja, przyspieszenie sprzętowe i wszystko. Ta biblioteka jest również nazywana Mesa3D; w rzeczywistości zapewnienie DRI jest częścią Mesa3D, a także X11 i jądra.

Mesa3D zapewnia libre Nagłówki kompatybilne z OpenGL na GNU/Linux i innych darmowych platformach.

Podsumowanie: Mesa3D to nazwa implementacji OpenGL w systemie GNU/Linux, ponieważ ta nazwa jest znakiem towarowym. Ta biblioteka zawiera doskonałą, funkcjonalną, poprawną i stosunkowo szybką implementację oprogramowania. Zawiera również bezpośredni interfejs renderowania dla akceleracji sprzętowej.

+0

Dziękuję bardzo. Nawiasem mówiąc, czy istnieje również prekompilowane biblioteki w moim "macierzystym" gcc, które mam na Linuksie, czy też muszę używać bibliotek mesa3d, kiedy kompiluję dla Linuksa? – Petike

+0

Będę edytować moją odpowiedź. –

+1

Nie ma czegoś takiego jak "wydanie MinGW GNU/Linux". Są to dwie oddzielne rzeczy. MinGW wygląda tak samo ze wszystkich stron. – rubenvb