如何在没有MSYS2的Windows上构建GTK + 3程序?

时间:2019-06-27 04:41:23

标签: c windows gtk gtk3

我想用GTK + 3编译代码。不使用MSYS2或Visual Studio。 我收到“未定义的引用”

首先,在官方页面https://www.gtk.org/download/windows.php上尝试了本教程,但是使用MSYS2太麻烦了;另外,我不想要类似Linux的环境,也不想要像类似Unix的环境(Visual Studio少得多)。

我下载了版本2的“所有软件包”,为所有环境设置了环境变量。一切正常,代码已编译! (版本2中的代码)。然后,我尝试更改为第3版,并从http://www.tarnyko.net/dl/gtk.htm

中下载了全部捆绑包(64位)

当然,环境变量也已更新,编译行中的库版本也已更新。该程序适用于版本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函数)。

1 个答案:

答案 0 :(得分:1)

首先,忘记使用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而言)需要这些工具。