如何将我用C语言写的GTK+应用程序从Linux交叉编译到Windows?我能否仅将"gcc"命令替换为"mingw32"?
如何将我用C语言写的GTK+应用程序从Linux交叉编译到Windows?我能否仅将"gcc"命令替换为"mingw32"?
Fedora拥有出色的mingw32跨编译工具链,其中包括许多预编译库,包括GTK+和gtkmm。对于大多数应用程序,您只需要安装交叉编译器和交叉编译的GTK+库: yum install mingw32-gcc mingw32-gtk2
一旦安装了所需的一切,编译您的应用程序只需要运行“mingw32-configure”,然后运行“make”。
更多信息请参见项目页面 https://fedoraproject.org/wiki/MinGW
实际上有一个名为MXE的项目可以完美地实现这一点。
如果您想要,您可以下载我的预构建二进制文件。
您还可以从头开始构建代码,理想情况下还应用this PR以更新到最新的GTK 3.24版本。
MXE有一个简单的包装器(x86_64-w64-mingw32.static-cmake
),可以在Linux上使用时交叉构建您的项目,面向Windows。允许将您的项目均匀静态地构建成单个.exe文件!当然,也支持共享构建(x86_64-w64-mingw32.shared-cmake
)。示例包装器脚本适用于基于CMake的项目。
在使用MXE构建项目之前,您需要从源代码构建GTK3。(虽然有一些Linux软件包可用,但大多已过时)。如果您正在使用C ++,还可以构建gtkmm3
。由于您是在C中,因此只需要构建gtk3
。
git clone https://github.com/mxe/mxe.git
su
mv mxe /opt/mxe
cd /opt/mxe
对于Windows 64位下的静态构建,需要GTK3和Gtkmm3:
sudo make gtk3 gtkmm3 -j 16 MXE_TARGETS='x86_64-w64-mingw32.static' MXE_PLUGIN_DIRS='plugins/gcc12'
针对共享构建到 Windows 64 位(再次使用 GTK3 + Gtkmm3):
sudo make gtk3 gtkmm3 -j 16 MXE_TARGETS='x86_64-w64-mingw32.shared' MXE_PLUGIN_DIRS='plugins/gcc12'
更多信息请参见MXE.cc上的教程步骤。
一旦您完成了交叉编译环境/MXE构建。现在,您可以使用我之前提到的CMake包装器脚本。这些脚本位于/opt/mxe/usr/bin/
目录中。
现在可以使用这些脚本(如x86_64-w64-mingw32.static-cmake
)来将您的项目编译为Windows,同时使用Linux操作系统。构建结果将是一个Windows .exe
文件。
免责声明:我个人创建了MXE的此PR以更新GTK到最新的3.24.x版本。
你可以使用mingw-cross-env - 你所需要做的就是将你的CC/CXX环境路径更改为i686-mingw32-前缀,并将mingw-cross-env bin目录(两个)导出到你的PATH变量中(如果你正在使用autotool,那么这将更加容易)- 可以在主页上查看文档。