首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在没有MSYS2的情况下在Windows上构建GTK+3程序?

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

Stack Overflow用户
提问于 2019-06-27 12:41:23
回答 1查看 1.4K关注 0票数 4

我想在不使用MSYS2和Visual Studio的情况下用GTK+3编译一段代码。我得到了“未定义的引用”

首先,在官方页面上尝试了这个教程:https://www.gtk.org/download/windows.php,但是使用MSYS2很混乱;另外,我既不想要像linux这样的环境,也不想要像unix那样的环境( Visual Studio少很多)。

我下载了版本2的"all in one bundle“,设置了环境变量和其他所有东西。一切都很好,代码编译好了!(来自版本2的代码)。然后我尝试切换到版本3,从http://www.tarnyko.net/dl/gtk.htm下载了all in one bundle (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 (works right)的编译行是:

代码语言:javascript
复制
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(我正在询问的版本)的编译行是:

代码语言:javascript
复制
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

最后一个库( intl )一开始就出了问题,因为它不存在于它应该存在的地方,而且没有编译;我删除了它,得到了我要求的错误,然后从我的GTK 2复制了intl(只是为了看看发生了什么),错误是一样的。

我期望这个程序能够被编译;但是我得到的是:undefined reference to: 'gtk_main_quit' (和所有GTK函数)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-27 17:42:39

首先,忘了使用GTK+ 2吧,一旦GTK+ 4发布,它就会被弃用(可能是今年夏天)。使用GTK+ 3,它已经稳定了很多年。

其次,忘掉Tarniko网站上的所有说明。虽然他当时做了很好的工作,但这些指令现在已经完全过时了,预编译的二进制文件是针对过时版本的GTK+ (3.6是在2012年9月发布的,而最新的版本是在2018年9月发布的3.24 )。

除了MSYS或vcpkg包提供的那些之外,没有官方的预编译二进制文件。您可能会发现更多最新的和非官方的包,like this one (从未尝试过),但从不受信任的来源获取二进制文件可能是一个安全问题。

接下来,如果你真的想构建一些东西,你需要一个工具链。您好像已经安装了gcc,您是怎么安装的?如果要使用预编译的二进制文件,则必须自行安装和配置工具链,因为这是特定于您的设置的。通常,为了避免兼容性问题,您需要用于构建依赖项的相同工具链,而这正是MSYS提供的。

最后,您可能只是从源代码构建整个东西,因为最新的GTK+版本可以使用Meson构建系统构建,该系统在Windows上应该构建得很好。

但说真的,如果你已经计划使用gcc,那就帮你自己一个忙,安装MSYS2吧。您将获得GTK+、工具链、绑定和其他工具,如glade和devhelp,如果您想要进行一些严肃的GTK+开发,则可能需要这些工具(至少对于Glade)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56784001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档