我在(Ubuntu)Linux上对C++应用程序进行编程,并将它们编译为2个操作系统:通过使用“g++”(GNU C++编译器)在Linux上 native 运行,并通过使用“i386-mingw32-g++”(MinGW C++交叉)将它们交叉编译到Windows。 -编译器)。
现在,我正在尝试交叉编译“OpenGL”应用程序(从Linux到Windows)-为此,我需要一些OpenGL库文件。
作为OpenGL的实现,我使用“Mesa 3D”开源库。幸运的是,Ubuntu为Linux提供了“预编译的” mesa3d库(libgl1-mesa-dev和libglu1-mesa-dev),但是不幸的是,没有用于MinGW交叉编译器(因此是Windows版本)的任何预编译的库-因此我“必须”手动“从源代码”编译它们(可以从http://www.mesa3d.org主页下载)。
但是我不知道要这样做。在mesa3d源代码中,有一些文档说明如何为某些特定平台构建库-特别是有“README.MINGW32”自述文件。
但是仅在第一行上有一些命令
mingw32-make -f Makefile.mgw [OPTIONS...]
我没有安装任何“mingw32-make”程序,因此无法运行。通过其他软件,我曾经使用“经典”
./configure -> make -> make install
程序,但这不适用于mesa3d库。
例如,我也尝试过
./configure --host=i386-mingw32
并且它已经配置好,但是在键入后
make
它抛出了一些错误
error: #error No PIPE_SUBSYSTEM_WINDOWS_xxx subsystem defined.
现在我迷失了:-(。
那么,有人知道如何构建将它们与mingw32结合使用的mesa3d库吗?
附言:当然,我绝对不想使用Microsoft Visual Studio,从此不再:-)。我也想做所有必要的事情,以从Linux建立OpenGL环境并使用mingw32进行交叉编译。我希望有可能。
P.S.2:在http://www.mesa3d.org/systems.html页面上,写道“不赞成将MinGW与Mesa 3D一起使用”。我以正确的方式使用它吗?
最佳答案
无需为MinGW编译Mesa3D。 MinGW包括GL库;它只是不被称为libGL.a
或libGLU.a
;这些库分别称为libopengl32.a
和libglu32.a
。可悲的是,这就是Microsoft决定在Visual Studio的Windows下将它们称为“它们”的原因,因此Windows和MinGW的GNU/Linux版本都决定包含上述命名的库。
因此,在针对Windows进行交叉编译时,只需进行以下更改:
-lGL -lGLU
进入
-lopengl32 -lglu32
GNU/Linux上的Mesa3D实际上是OpenGL的自由实现的名称。这是因为OpenGL是商标,并且SGI的政策不允许任何人在不支付巨额费用的情况下使用该名称。尽管如此,SGI还是为作者Brian Paul提供了测试套件的副本。
Mesa3D在大多数具有本地OpenGL实现的平台上都被称为软件“健全性检查”库,它具有许多仅用于高端硬件的功能的仿真。但是在GNU/Linux上,更重要的是称为DRI或直接渲染接口(interface)的东西。这是真正的交易,包括硬件加速和所有方面。该库也称为Mesa3D。实际上,提供DRI是Mesa3D以及X11和内核的一部分。
Mesa3D在GNU/Linux和其他免费平台上提供了与OpenGL兼容的 header 。
摘要: Mesa3D是OpenGL的GNU/Linux实现的名称,因为该名称是商标。该库包括出色,功能强大,正确且相对较快的软件实现。它还包括用于硬件加速的直接渲染界面。
关于OpenGL + Mesa 3D + MinGW,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1989431/