如何在没有 MSYS2 的情况下在 Windows 上构建 GTK+3 程序?
How to build a GTK+3 program on Windows without MSYS2?
我想用 GTK+3 编译代码。不使用 MSYS2 也不使用 Visual Studio。
我得到 "undefined reference to"
首先,尝试使用官方页面上的本教程:https://www.gtk.org/download/windows.php 但是使用 MSYS2 时一团糟;另外,我不想要像 linux 或像 unix 的环境(更不用说 Visual Studio)。
我下载了版本 2 的 "all in one bundle",设置了环境变量等等。一切正常,代码已编译! (来自版本 2 的代码)。然后我尝试更改为版本 3,从以下位置下载了所有合一包(64 位):http://www.tarnyko.net/dl/gtk.htm
当然,环境变量更新了,编译行中库的版本也更新了。并且该程序为第3版,具体第一个在官网:https://developer.gnome.org/gtk3/stable/gtk-getting-started.html。没用。
然后,按照本教程进行操作:http://www.tarnyko.net/repo/gtk3_build_system/tutorial/gtk3_tutorial.htm
我用命令的结果重写了编译行:pkg-config --cflags --libs gtk+-3.0
(如上面的教程所说)
版本 2(正常工作)的编译行是:
gcc -Wall -g test.c -o test -mms-bitfields -Ic:/gtk/include/gtk-2.0 -Ic:/gtk/lib/gtk-2.0/include -Ic:/gtk/include/atk-1.0 -Ic:/gtk/include/cairo -Ic:/gtk/include/gdk-pixbuf-2.0 -Ic:/gtk/include/pango-1.0 -Ic:/gtk/include/glib-2.0 -Ic:/gtk/lib/glib-2.0/include -Ic:/gtk/include -Ic:/gtk/include/freetype2 -Ic:/gtk/include/libpng14 -Lc:/gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl
版本 3(我要问的那个)的编译行是:
gcc -Wall -g iniciando.c -o iniciando -mms-bitfields -IC:/gtk3/include/gtk-3.0 -IC:/gtk3/include/cairo -IC:/gtk3/include/pango-1.0 -IC:/gtk3/include/atk-1.0 -IC:/gtk3/include/cairo -IC:/gtk3/include/pixman-1 -IC:/gtk3/include -IC:/gtk3/include/freetype2 -IC:/gtk3/include -IC:/gtk3/include/libpng15 -IC:/gtk3/include/gdk-pixbuf-2.0 -IC:/gtk3/include/libpng15 -IC:/gtk3/include/glib-2.0 -IC:/gtk3/lib/glib-2.0/include -LC:/gtk3/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangocairo-1.0 -lpangoft2-1.0 -lfreetype -lfontconfig -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lm -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl
最后一个 lib (intl),一开始就出了问题,因为它不存在于它应该存在的地方,也没有编译任何东西;我删除了它并得到了我要求的错误,然后从我的 GTK 2 中复制了 intl(只是为了看看发生了什么),错误是一样的。
我希望程序可以编译;但我得到:undefined reference to: 'gtk_main_quit'
(以及所有 GTK 函数)。
首先,忘记使用 GTK+ 2,一旦 GTK+ 4 发布(可能在今年夏天),它就会被弃用。使用多年来一直稳定的GTK+ 3。
其次,忘掉 Tarniko 网站上的所有说明。虽然他当时做得很好,但这些说明现在已经完全过时了,预编译的二进制文件是针对过时版本的 GTK+(3.6 于 2012 年 9 月发布,而最新版本是 3.24 于 2018 年 9 月发布)
除了 MSYS 或 vcpkg 包提供的二进制文件外,没有官方的预编译二进制文件。您可能会发现一些更新的和非官方的捆绑包,like this one(从未尝试过),但是从不受信任的来源获取二进制文件可能是一个安全问题。
接下来,如果你真的想构建一些东西,你需要一个工具链。你好像已经安装了gcc,你是怎么安装的?如果你想使用预编译的二进制文件,你必须自己安装和配置工具链,因为这是特定于你的设置的。通常为了避免兼容性问题,您需要用于构建依赖项的相同工具链,而这正是 MSYS 提供的。
最后,您可能只是从源代码构建整个东西,因为可以使用 Meson 构建系统构建最新的 GTK+ 版本,该系统应该可以在 Windows.
上正常构建
但实际上,如果您已经计划使用 gcc,请帮自己一个忙,安装 MSYS2。您将获得 GTK+、一个工具链、绑定以及其他工具,如 glade 和 devhelp,如果您想进行一些严肃的 GTK+ 开发,可能需要这些工具(至少对于 Glade 而言)。
我想用 GTK+3 编译代码。不使用 MSYS2 也不使用 Visual Studio。 我得到 "undefined reference to"
首先,尝试使用官方页面上的本教程:https://www.gtk.org/download/windows.php 但是使用 MSYS2 时一团糟;另外,我不想要像 linux 或像 unix 的环境(更不用说 Visual Studio)。
我下载了版本 2 的 "all in one bundle",设置了环境变量等等。一切正常,代码已编译! (来自版本 2 的代码)。然后我尝试更改为版本 3,从以下位置下载了所有合一包(64 位):http://www.tarnyko.net/dl/gtk.htm
当然,环境变量更新了,编译行中库的版本也更新了。并且该程序为第3版,具体第一个在官网:https://developer.gnome.org/gtk3/stable/gtk-getting-started.html。没用。
然后,按照本教程进行操作:http://www.tarnyko.net/repo/gtk3_build_system/tutorial/gtk3_tutorial.htm
我用命令的结果重写了编译行:pkg-config --cflags --libs gtk+-3.0
(如上面的教程所说)
版本 2(正常工作)的编译行是:
gcc -Wall -g test.c -o test -mms-bitfields -Ic:/gtk/include/gtk-2.0 -Ic:/gtk/lib/gtk-2.0/include -Ic:/gtk/include/atk-1.0 -Ic:/gtk/include/cairo -Ic:/gtk/include/gdk-pixbuf-2.0 -Ic:/gtk/include/pango-1.0 -Ic:/gtk/include/glib-2.0 -Ic:/gtk/lib/glib-2.0/include -Ic:/gtk/include -Ic:/gtk/include/freetype2 -Ic:/gtk/include/libpng14 -Lc:/gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl
版本 3(我要问的那个)的编译行是:
gcc -Wall -g iniciando.c -o iniciando -mms-bitfields -IC:/gtk3/include/gtk-3.0 -IC:/gtk3/include/cairo -IC:/gtk3/include/pango-1.0 -IC:/gtk3/include/atk-1.0 -IC:/gtk3/include/cairo -IC:/gtk3/include/pixman-1 -IC:/gtk3/include -IC:/gtk3/include/freetype2 -IC:/gtk3/include -IC:/gtk3/include/libpng15 -IC:/gtk3/include/gdk-pixbuf-2.0 -IC:/gtk3/include/libpng15 -IC:/gtk3/include/glib-2.0 -IC:/gtk3/lib/glib-2.0/include -LC:/gtk3/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangocairo-1.0 -lpangoft2-1.0 -lfreetype -lfontconfig -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lm -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl
最后一个 lib (intl),一开始就出了问题,因为它不存在于它应该存在的地方,也没有编译任何东西;我删除了它并得到了我要求的错误,然后从我的 GTK 2 中复制了 intl(只是为了看看发生了什么),错误是一样的。
我希望程序可以编译;但我得到:undefined reference to: 'gtk_main_quit'
(以及所有 GTK 函数)。
首先,忘记使用 GTK+ 2,一旦 GTK+ 4 发布(可能在今年夏天),它就会被弃用。使用多年来一直稳定的GTK+ 3。
其次,忘掉 Tarniko 网站上的所有说明。虽然他当时做得很好,但这些说明现在已经完全过时了,预编译的二进制文件是针对过时版本的 GTK+(3.6 于 2012 年 9 月发布,而最新版本是 3.24 于 2018 年 9 月发布)
除了 MSYS 或 vcpkg 包提供的二进制文件外,没有官方的预编译二进制文件。您可能会发现一些更新的和非官方的捆绑包,like this one(从未尝试过),但是从不受信任的来源获取二进制文件可能是一个安全问题。
接下来,如果你真的想构建一些东西,你需要一个工具链。你好像已经安装了gcc,你是怎么安装的?如果你想使用预编译的二进制文件,你必须自己安装和配置工具链,因为这是特定于你的设置的。通常为了避免兼容性问题,您需要用于构建依赖项的相同工具链,而这正是 MSYS 提供的。
最后,您可能只是从源代码构建整个东西,因为可以使用 Meson 构建系统构建最新的 GTK+ 版本,该系统应该可以在 Windows.
上正常构建但实际上,如果您已经计划使用 gcc,请帮自己一个忙,安装 MSYS2。您将获得 GTK+、一个工具链、绑定以及其他工具,如 glade 和 devhelp,如果您想进行一些严肃的 GTK+ 开发,可能需要这些工具(至少对于 Glade 而言)。