2010-01-01 2 views
12

Программирую C++ приложений на (Ubuntu) Linux и компилировать их в 2 операционные системы: изначально в Linux с помощью "г ++" (GNU C++ компилятор) и кросс-компилировать их для Windows используя «i386-mingw32-g ++» (кросс-компилятор MinGW C++).OpenGL + Mesa 3D + MinGW

Теперь я пытаюсь перекрестно скомпилировать приложения OpenGL (от Linux до Windows) - для этого мне нужны файлы библиотеки OpenGL.
В качестве реализации OpenGL я использую библиотеку с открытым исходным кодом «Mesa 3D». К счастью, Ubuntu предлагает «предварительно скомпилированные» библиотеки mesa3d (libgl1-mesa-dev и libglu1-mesa-dev) для Linux, но, к сожалению, нет никаких предварительно скомпилированных библиотек для использования с кросс-компилятором MinGW (таким образом, версии Windows их) - поэтому я «ДОЛЖЕН» вручную скомпилировать их «из источника» (который можно загрузить с http://www.mesa3d.org на главной странице).

Но я не собираюсь это делать. В исходном коде mesa3d есть некоторые документы о том, как создавать библиотеки для некоторых определенных платформ - в частности, есть файл Readme README.MINGW32.
Но только на первых строках есть некоторые команды

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

который я не могу работать, потому что у меня нет никакой программы «mingw32-грим» установлен. К другому программному обеспечению, я использовал, чтобы построить их с «классическим»

./configure -> make -> make install 

процедуры, но это не работает на mesa3d библиотек.
Например, я также попытался

./configure --host=i386-mingw32 

и он был настроен нормально, но после ввода

make 

он бросил ошибку

error: #error No PIPE_SUBSYSTEM_WINDOWS_xxx subsystem defined. 

и теперь я теряюсь: - (

Значит, кто-нибудь знает, как построить библиотеки mesa3d для r используя их с mingw32?

P.S .: И, конечно, Я НЕ ХОЧУ использовать Microsoft Visual Studio никогда больше :-). Кроме того, я хотел бы сделать все необходимое для создания среды OpenGL из Linux и использования mingw32 для кросс-компиляции. Надеюсь, это возможно.

P.S.2: На странице http://www.mesa3d.org/systems.html написано, что использование MinGW с Mesa 3D «устарело». Я нахожусь на правильном пути, чтобы использовать его именно так?

+0

Просто интересно ... OpenGL обычно используется для доступа к аппаратно ускоренному 3D. Используя mesa на окнах, вы прибегаете к реализации программного обеспечения на окнах. Это действительно то, что вы хотите? В противном случае вам просто нужно использовать библиотеки opengl для окон. – Bahbar

+0

Моя основная цель - «независимость от архитектуры» при написании кода C++ -> поэтому я подумал, что использование кросс-платформенной библиотеки («mesa3d» в этом случае) - хороший способ добиться этого, я не знаю, может быть, я Я ошибаюсь. Так что я должен понимать это так, что в «каждой Windows» есть некоторые «библиотеки», которые реализуют OpenGL, и когда я пишу какой-то код OpenGL на моем Linux-машине, мне не нужно распространять какие-либо дополнительные библиотеки OpenGL с моей программой? Если да, то в каких библиотеках это «opengl.dll», «libopengl.lib» или что? – Petike

+0

OpenGL обычно отображается как часть платформы. Для Windows Microsoft навсегда открыла интерфейс OpenGL (opengl.lib) в своих платформах SDK. Я не уверен точно, как вы собираетесь строить .a для mingw linker из них, но это определенно отличается от использования mesa. – Bahbar

ответ

16

Не нужно собирать Mesa3D для MinGW. MinGW включает библиотеку GL; его просто не называют libGL.a, но не libGLU.a; библиотеки вместо этого называются libopengl32.a и libglu32.a. К сожалению, именно это Microsoft решила назвать их под Windows на Visual Studio, поэтому выпуск Windows и GNU/Linux MinGW решил включить библиотеки, названные выше.

Итак, когда кросс компиляции для Windows, просто изменить:

-lGL -lGLU 

в

-lopengl32 -lglu32 

Mesa3D на GNU/Linux на самом деле имя для Libre реализации OpenGL , Это связано с тем, что OpenGL является товарным знаком, и политика SGI не позволяла кому-либо использовать это имя, не заплатив огромную сумму денег. Несмотря на это, SGI предоставила автору Брайану Полю копию набора тестов.

Mesa3D находится на большинстве платформ с собственной реализацией OpenGL, известной как программная библиотека «Проверка работоспособности», с эмуляцией множества функций высокого класса для аппаратного обеспечения. Но в GNU/Linux гораздо важнее то, что называется DRI или прямым интерфейсом рендеринга. Это реальная сделка, аппаратное ускорение и все. Эта библиотека также называется Mesa3D; на самом деле, предоставление DRI является частью Mesa3D, а также X11 и ядра.

Mesa3D предоставляет libre OpenGL-совместимые заголовки на GNU/Linux и других бесплатных платформах.

Основная информация: Mesa3D - это имя для реализации OpenGL GNU/Linux, поскольку это имя является товарным знаком. Эта библиотека включает отличную, функциональную, правильную и относительно быструю реализацию программного обеспечения. Он также включает в себя прямой интерфейс рендеринга для аппаратного ускорения.

+0

Большое спасибо. Кстати, есть ли также предварительно скомпилированные библиотеки в моем «родном» gcc, который у меня есть в Linux, или мне нужно использовать библиотеки mesa3d, когда я компилирую для Linux? – Petike

+0

Я отредактирую свой ответ. –

+1

Нет такой вещи, как «выпуск GNU/Linux MinGW». Это две отдельные вещи. MinGW выглядит одинаково со всех сторон. – rubenvb

 Смежные вопросы

  • Нет связанных вопросов^_^