我需要将GTK+应用程序从GNU/Linux(Arch Linux)交叉编译到Windows。我已经尝试使用mingw32
,但它没有看到所有库(包括c的标准库!)。所以,我需要:找到标准的libary;查找所有其他(glib、gio、gtk等)库。但有一个问题——我找不到它们。我也不能从Windows编译。我该怎么办?
您可以在源代码forge或http://win32builder.gnome.org/.
一旦你提取了它们,你可以按照本教程的步骤:
1)安装编译工具链
-
安装适用于Windows的GCC编译器(即MinGW,包的Arch Linux文档):
#pacman -S migw-w64
-
直接从官方网站下载最新的一体式捆绑包ZIP档案(这里有直接链接)
-
使GTK+适应其位置:在终端中,移动到您刚刚创建的"gtk3-in32"文件夹。例如:
$cd /opt/gtk3-win32
然后执行:find -name '*.pc' | while read pc; do sed -e "s@^prefix=.*@prefix=$PWD@" -i "$pc"; done
2)编译
-
我们将告诉
pkg-config
在我们的自定义路径中定位GTK+3库。如果提取到/opt/gtk3-win32
:export PKG_CONFIG_PATH=/opt/gtk3-win32/lib/pkgconfig
我们已经准备好编译一个示例C源代码了!让我们使用这种风格的命令:
i586-mingw32msvc-gcc source.c -o executable.exe `pkg-config --cflags --libs gtk+-3.0
如果一切顺利,就应该创建一个新的可执行文件。它不会在我们的Linux系统上运行,因为它的目标是Windows!
3)发布
-
创建一个包含二进制文件和Windows.dll文件的文件夹。如果提取到
/opt/gtk3-win32
:mkdir ~/distri cp executable.exe ~/distri cp /opt/gtk3-win32/bin/*.dll ~/distri
-
我们来了!将此文件夹转移到Windows框中。双击可执行文件,然后。。。
以下说明适用于gcc 5.3.0(线程型号:posix)和gtk+3.20.4
在windows上安装msys2
安装gtk3文件并复制文件
安装后,在msys2外壳中
pacman -S mingw-w64-i686-gtk3
cd /mingw32
tar cfz c:/temp/mingw32.tar.gz
确保在Arch Linux上匹配gcc版本
对于gcc 5.3.0,编辑/etc/pacman.conf
[core]
Server = https://archive.archlinux.org/repos/2016/05/10/$repo/os/$arch
[extra]
Server = https://archive.archlinux.org/repos/2016/05/10/$repo/os/$arch
[community]
Server = https://archive.archlinux.org/repos/2016/05/10/$repo/os/$arch
在升级的情况下
pacman -Syu
如果降级
pacman -Syyuu
稍后的Arch Linux版本似乎有可能与msys2 gcc不兼容的gcc 6.1.1。对于不会升级(即没有安全更新)的Arch Linux安装,虚拟机可能是个好主意。
将文件复制到linux
在linux上解压缩mingw32.tar.gz,例如/opt/mingw32
修改pkg配置文件
perl -pi.bak -e 's,^prefix=.*,prefix=/opt/mingw32,' /opt/mingw32/lib/pkgconfig/*.pc
设置PKG_CONFIG_PATH
例如,在执行配置脚本之前
export PKG_CONFIG_PATH=/opt/mingw32/lib/pkgconfig