2010-01-01 2 views
12

나는 (우분투) 리눅스에서 C++ 응용 프로그램 및 2 명 운영 체제로 컴파일 : 기본적으로 리눅스에 사용하여 "g을 ++"(GNU C++ 컴파일러) 및 Windows로 크로스 컴파일 "i386-mingw32-g ++"(MinGW C++ 크로스 컴파일러)를 사용합니다.는 OpenGL + 메사 3D +는 MinGW

이제 "OpenGL"응용 프로그램 (Linux에서 Windows로)을 크로스 컴파일하려고합니다. 일부 OpenGL 라이브러리 파일이 필요합니다.
OpenGL의 구현으로 "Mesa 3D"오픈 소스 라이브러리를 사용합니다. 다행스럽게도 우분투는 Linux 용으로 "사전 컴파일 된"mesa3d 라이브러리 (libgl1-mesa-devlibglu1-mesa-dev)를 제공하지만 불행히도 MinGW 크로스 컴파일러와 함께 사용하기위한 사전 컴파일 라이브러리가 없습니다. 그들) - 그래서 나는 "소스에서"수동으로 컴파일해야합니다 (http://www.mesa3d.org 홈페이지에서 다운로드 가능).

하지만 그렇게 할 생각은 없습니다. mesa3d 소스 코드에는 특정 플랫폼 용 라이브러리를 빌드하는 방법에 대한 문서가 있습니다. 특히 "README.MINGW32"추가 정보 파일이 있습니다.
는 그러나 단지 첫 번째 줄에 내가 설치 한 "mingw32-메이크업"프로그램이 없기 때문에 내가 실행할 수없는 명령

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

있다. 다른 소프트웨어에 의해, 나는 "고전적인"

./configure -> make -> make install 

절차를 구축하는 데 사용하지만,이 mesa3d 라이브러리에서 작동하지 않습니다.
예를 들어, 나는 또한

./configure --host=i386-mingw32 

을 시도하고 괜찮아요 구성되었지만 입력 한 후

make 

는 몇 가지 오류

error: #error No PIPE_SUBSYSTEM_WINDOWS_xxx subsystem defined. 

을 던져 버리고 지금은 손실 오전 : - (.

그래서 누구나 mesa3d 라이브러리를 빌드하는 방법을 알고 있습니다. fo r mingw32와 함께 사용 하시겠습니까?

P.S : 그리고 물론

, 나는 마이크로 소프트 비주얼 스튜디오 결코 더 :-)를 사용하는 싶지 않아요. 또한 Linux에서 OpenGL 환경을 구축하고 크로스 컴파일을 위해 mingw32를 사용하기 위해 필요한 모든 것을하고 싶습니다. 나는 그것이 가능하기를 희망한다.

P.S.2 :http://www.mesa3d.org/systems.html 페이지에서 MinGW를 Mesa 3D와 함께 사용하는 것이 "사용되지 않음"으로되어 있습니다. 나는 그런 식으로 사용할 권리가 있습니다.

+0

그냥 궁금해 ... OpenGL은 일반적으로 하드웨어 가속 3D에 액세스하는 데 사용됩니다. Windows에서 메사를 사용하면 Windows에서 소프트웨어 구현에 의존하게됩니다. 그게 니가 원하는거야? 그렇지 않으면, 당신은 단지 윈도우 제공 OpenGL 라이브러리를 사용해야합니다. – Bahbar

+0

내 기본 목표는 "아키텍처 독립적"인 C++ 코드 작성 -> 따라서 크로스 플랫폼 라이브러리 (이 경우에는 "mesa3d")를 사용하면이를 달성하는 좋은 방법이라고 생각합니다. 틀렸다. "각 Windows"에는 OpenGL을 구현하는 일부 "라이브러리"가 있고 Linux 컴퓨터에 OpenGL 코드를 작성할 때 내 프로그램과 함께 추가 OpenGL 라이브러리를 배포 할 필요가 없으므로 이해해야합니까? 그렇다면 "opengl.dll", "libopengl.lib"또는 무엇입니까? – Petike

+0

OpenGL은 대개 플랫폼의 일부로 노출됩니다. Windows의 경우 Microsoft는 플랫폼 SDK에 OpenGL 인터페이스 (opengl.lib)를 제공했습니다. 나는 그 중 mingw 링커를 빌드하는 방법에 대해 정확히 어떻게 확신하는지 모르겠다. 그러나 확실히 mesa를 사용하는 것과는 다르다. – Bahbar

답변

16

MinGW 용 Mesa3D를 컴파일 할 필요가 없습니다. MinGW에는 GL 라이브러리가 포함되어 있습니다. 그냥 libGL.a이나 libGLU.a으로 불리지 않았습니다. 라이브러리는 대신 libopengl32.alibglu32.a으로 지정됩니다. 안타깝게도, 이것은 Microsoft가 Windows에서 Visual Studio로 호출하기로 결정한 것입니다. 따라서 Windows와 MinGW에서 Windows와 GNU/Linux 모두 위에 언급 한 라이브러리를 포함하기로 결정했습니다.크로스 Windows 용 컴파일 할 때

그래서, 단지 변경 :

-lGL -lGLU 

GNU/리눅스에

-lopengl32 -lglu32 

Mesa3D

로되어 실제로 이름을 OpenGL을의 리브레 구현 . 이것은 OpenGL이 상표이기 때문에 SGI의 정책은 엄청난 돈을 지불하지 않고 누구나 이름을 사용할 수 없기 때문입니다. 그럼에도 불구하고 SGI는 저자 인 Brian Paul에게 테스트 스위트의 사본을 제공했습니다.

Mesa3D는 수많은 하이 엔드 하드웨어 전용 기능의 에뮬레이션을 사용하는 소프트웨어 "정상 상태 확인"라이브러리로 알려진 원시 OpenGL 구현이있는 대부분의 플랫폼에 있습니다. 그러나 GNU/Linux에서 DRI 또는 ​​직접 렌더링 인터페이스라고하는 것이 훨씬 더 중요합니다. 이것은 실제 거래이며, 하드웨어 가속과 모든 것입니다. 이 라이브러리는 Mesa3D라고도합니다. 실제로 DRI에 대한 프로비저닝은 X11과 커널뿐만 아니라 Mesa3D의 일부입니다.

Mesa3D는 libre GNU/Linux 및 기타 무료 플랫폼에서 OpenGL 호환 헤더를 제공합니다.

요약 : Mesa3D는 OpenGL의 GNU/Linux 구현의 이름으로, 해당 이름이 등록되어있어 상표입니다. 이 라이브러리는 우수하고 기능이 뛰어나고 정확하며 상대적으로 빠른 소프트웨어 구현을 포함합니다. 또한 하드웨어 가속을위한 직접 렌더링 인터페이스도 포함됩니다.

+0

고맙습니다. 그건 그렇고, 리눅스에있는 "원시"gcc에 미리 컴파일 된 라이브러리가 있습니까? 아니면 Linux 용으로 컴파일 할 때 mesa3d 라이브러리를 사용해야합니까? – Petike

+0

답안을 수정하겠습니다. –

+1

"MinGW의 GNU/Linux 버전"과 같은 것은 없습니다. 그것들은 두 개의 별개의 것들입니다. MinGW는 모든 각도에서 동일하게 보입니다. – rubenvb