OpenGL + Mesa 3D + MinGW

13
我在(Ubuntu)Linux上编写C ++应用程序,并使用“g ++”(GNU C ++编译器)将它们本地编译成Linux,然后使用“i386-mingw32-g ++”(MinGW C ++交叉编译器)将其交叉编译成Windows。现在,我正在尝试交叉编译“OpenGL”应用程序(从Linux到Windows),为此我需要一些OpenGL库文件。作为OpenGL的实现,我使用“Mesa 3D”开源库。幸运的是,Ubuntu提供了“预编译”的mesa3d库(libgl1-mesa-dev和libglu1-mesa-dev)供Linux使用,但不幸的是,没有任何预编译库可供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库吗?

P.S.:当然,我绝不想再使用Microsoft Visual Studio :-) 我也想做所有必要的事情,从Linux开始构建OpenGL环境,并使用mingw32进行交叉编译。我希望这是可能的。

P.S.2:http://www.mesa3d.org/systems.html页面上写着,使用MinGW和Mesa 3D是“已废弃”的。我用它构建是正确的吗?


请问...OpenGL通常用于访问硬件加速的3D。在Windows上使用Mesa,您会转而使用软件实现。这真的是您想要的吗?否则,您只需要使用Windows提供的OpenGL库。 - Bahbar
我的主要目标是在编写C++代码时“与架构无关”,因此我认为使用跨平台库(在这种情况下是“mesa3d”)是实现这一目标的好方法,但我不知道,也许我错了。那么,我应该理解为在“每个Windows”中都有一些实现OpenGL的“库”,当我在Linux机器上编写一些OpenGL代码时,我不需要在我的程序中分发任何额外的OpenGL库?如果是这样,那么这些库是什么 - “opengl.dll”,“libopengl.lib”还是其他什么? - Petike
OpenGL通常作为平台的一部分公开。对于Windows,微软一直在其平台SDK中提供OpenGL接口(opengl.lib)。我不确定如何从中构建.a文件以供mingw链接器使用,但这肯定与使用mesa不同。 - Bahbar
Mesa本身是一个软件实现。在GNU/Linux上,除了软件实现外,它还包括DRI(直接渲染接口),这使得可以编写GL的硬件加速驱动程序。 - Ivan Vučica
1个回答

18

无需为MinGW编译Mesa3D。MinGW包含GL库;只是它的名称不是libGL.alibGLU.a,而是libopengl32.alibglu32.a。可悲的是,这是微软在Visual Studio下对它们的命名方式,因此Windows和GNU/Linux版本的MinGW决定采用以上名称来包含这些库。

因此,在交叉编译Windows时,只需更改:

-lGL -lGLU

转换为

-lopengl32 -lglu32

Mesa3D是GNU/Linux中OpenGL的一种自由实现,因为OpenGL是商标,SGI的政策不允许任何人在没有支付大量费用的情况下使用这个名字。尽管如此,SGI向作者Brian Paul提供了测试套件的副本。

Mesa3D在大多数平台上被视为一个软件“安全检查”库,模拟了许多高端硬件专有功能。但是在GNU/Linux上,更重要的是称为DRI或直接渲染接口的东西。这是真正的交易,具备硬件加速等所有功能。这个库也叫作Mesa3D;事实上,DRI的配备是Mesa3D、X11和内核的一部分。

Mesa3D在GNU/Linux和其他自由平台上提供自由的OpenGL兼容头文件。

总结: Mesa3D是GNU/Linux中OpenGL的名称,因为该名称是商标。该库包括一个出色、功能丰富、正确而相对快速的软件实现。它还包括用于硬件加速的直接渲染接口。


非常感谢。 顺便问一下,在我在Linux上使用的“本地”gcc中是否也有预编译库,还是在编译Linux时必须使用mesa3d库? - Petike
1
没有所谓的“GNU/Linux版本的MinGW”。它们是两个不同的东西。从各个角度来看,MinGW看起来都是一样的。 - rubenvb
2
@rubenvb 为什么要挑刺,当你明白我的意思时呢? - Ivan Vučica
在当前版本(sep'13)的MINGW中是否仍然适用?我正在浏览MINGW的安装管理器,但无法在其中找到OpenGL库。 - Bram
@Bram 我不会检查可用软件包列表,因为我不是每天都在运行Windows。但考虑到OpenGL自Windows 95以来就成为Windows的一部分,我认为在2013年9月OpenGL并没有突然开始作为单独的库包出现。它应该包含在MinGW安装程序提供的任何Win32 API支持包中。每当我安装MinGW或包括MinGW的IDE时,opengl32glu32总是已经存在。 - Ivan Vučica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接