C: GTK+ 3.0 (3.20) - 在 GNU/Linux (Arch Linux) 上交叉编译到 Windows

8

我需要将GTK+应用程序从GNU/Linux(Arch Linux)交叉编译到Windows。我已经尝试使用mingw32,但它无法看到所有库(包括C的标准库!)。所以,我需要找到标准库;找到所有其他库(glib、gio、gtk等)。但是有一个问题-我无法找到它们。我也无法从Windows编译。我该怎么办?

2个回答

7
您可以在SourceForge上找到Windows下的GTK 3二进制文件(链接),或者在http://win32builder.gnome.org/上找到。

一旦您提取了它们,您可以按照这个教程进行以下步骤:

1)安装编译工具链

  • 安装Windows的GCC编译器(即MinGW,Arch Linux软件包文档):

    #pacman -S migw-w64

  • 直接从官方网站下载最新的全套ZIP压缩包(这是一个直接的链接

  • 将GTK+适应其位置:在终端中,移动到您刚刚创建的“gtk3-win32”文件夹。例如:$cd /opt/gtk3-win32然后执行:

    find -name '*.pc' | while read pc; do sed -e "s@^prefix=.*@prefix=$PWD@" -i "$pc"; done

2)编译

  • We will tell pkg-config to locate GTK+3 libraries in our custom path. If you extracted to /opt/gtk3-win32:

    export PKG_CONFIG_PATH=/opt/gtk3-win32/lib/pkgconfig

    We are ready to compile a sample C source ! Let's use a command in this style :

    i586-mingw32msvc-gcc source.c -o executable.exe `pkg-config --cflags --libs gtk+-3.0
如果一切顺利,应该会创建一个新的可执行文件。但由于它是针对Windows系统的,所以无法在我们的Linux系统上运行!
3) 发布
  • Create a folder containing the binary and the Windows .dll files. If you extracted to /opt/gtk3-win32:

    mkdir ~/distri
    cp executable.exe ~/distri
    cp /opt/gtk3-win32/bin/*.dll ~/distri
  • Here we go ! Transfer this folder to a Windows box. Double-click on the executable and...


好的,但是如果我需要gtk3.20而不是gtk 3.6怎么办?它们之间有很大的差异。几乎像gtk2和gtk3一样。 - handicraftsman
Source Forge上的最新版本是3.18。我不确定3.20是否已经移植。 - Jacques Gaudin
我的当前版本:3.20.9 - handicraftsman
你是指在Windows还是Linux上?我在Linux上有3.20版,但我不确定它是否已经移植到Windows平台。如果Windows版本比Linux发布晚几个月,我也不会感到惊讶。 - Jacques Gaudin
在Linux上。(CTS) - handicraftsman

1
以下说明适用于gcc 5.3.0(线程模型:posix)和gtk+ 3.20.4。
在Windows上安装msys2
安装gtk3文件并复制这些文件。
安装完成后,在msys2 shell中执行。
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 版本似乎有 gcc 6.1.1,可能与 msys2 的 gcc 不兼容。对于不进行升级的 Arch Linux 安装(即无安全更新),虚拟机可能是一个好主意。

将文件复制到 Linux

在 Linux 上解压 mingw32.tar.gz,例如在 /opt/mingw32 中。

修改 pkg-config 文件

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

我注意到这些gtk3 dll库依赖于* libgcc_s_dw2-1.dll *,即异常模型为dw2。随Arch Linux mingw-w64-gcc软件包一起提供的编译器已使用选项--disable-dw2-exceptions构建。 - J.J. Hakala
我没有Windows系统。 - handicraftsman

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