【发布时间】:2010-01-01 19:52:39
【问题描述】:
我在 (Ubuntu) Linux 上编写 C++ 应用程序并将它们编译到 2 个操作系统:使用“g++”(GNU C++ 编译器)本地编译到 Linux 并将它们交叉编译到 Windows 通过使用“i386-mingw32-g++”(MinGW C++ 交叉编译器)。
现在,我正在尝试交叉编译“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.
现在我迷路了 :-( .
那么有人知道如何构建 mesa3d 库以将它们与 mingw32 一起使用吗?
P.S.:当然,我不想再使用 Microsoft Visual Studio :-) 。而且我还想做所有必需的事情来从 Linux 构建 OpenGL 环境并使用 mingw32 进行交叉编译。我希望这是可能的。
P.S.2:在http://www.mesa3d.org/systems.html 页面上写着“不推荐使用”带有 Mesa 3D 的 MinGW。我就是这样使用它的正确方法?
【问题讨论】:
-
只是想知道... OpenGL 通常用于访问硬件加速的 3D。通过在 windows 上使用 mesa,您可以在 windows 上使用软件实现。这真的是你想要的吗?否则,您只需要使用 windows 提供的 opengl 库即可。
-
我的主要目标是在编写 c++ 代码时“独立于架构” -> 因此我认为使用跨平台库(在本例中为“mesa3d”)是实现这一目标的好方法,我不知道,也许我错了。所以我应该理解它,以便在“每个 Windows”中都有一些实现 OpenGL 的“库”,当我在我的 Linux 机器上编写一些 OpenGL 代码时,我不需要在我的程序中分发任何额外的 OpenGL 库?如果是这样,那是哪些库 - “opengl.dll”、“libopengl.lib”还是什么?
-
OpenGL 通常作为平台的一部分公开。对于 Windows,Microsoft 一直在其平台 SDK 中提供 OpenGL 接口 (opengl.lib)。我不确定你究竟是如何为 mingw 链接器构建 .a 的,但它与使用 mesa 绝对不同。
-
Mesa 本身就是一个软件实现。在 GNU/Linux 上,除了软件实现之外,它还包括 DRI(直接渲染接口),它允许为 GL 编写硬件加速驱动程序。