如何在Windows上安装GTK+ 3.0?

39

尝试在Codeblocks Win7上安装GTK+ 3.0。但是在如何做这件事上遇到了一些麻烦。

GTK网站指导您使用msys2。似乎曾经有一个直接下载适用于Windows的单个软件包的链接,但现在已不再提供。

按照说明安装和更新了msys2后,在已安装的文件或者GTK指引您前往的mysys网站上都没有找到关于GTK+的任何信息。

也许这听起来非常像Linux,需要做的事情本应该很简单,但却非常含混不清。也许我错过了什么,但难道不能只是下载一个压缩文件夹,解压并设置路径吗?

如果这样下去,学C++并使用Qt可能会更快。

问题就在标题中,我惊讶自己必须要问这个问题,感觉谷歌完全可以解决这个问题,但我发现所有的信息都在关于GTK网站上不再提供的下载上。我无法找到关于msys2和GTK+3.0的任何信息。

提前感谢。


对于GUI,我是一名初学者程序员,目前只了解一些C语言。 - NOP da CALL
4
我很乐意翻译,但我目前喜欢活着并且不想冒险去应对那个永无止境的头疼问题——Linux。我尊重使用Linux的人,但在我少数使用它的经历中,每次在我尝试使用电脑做我想做的事情之前,总是接连出现各种问题。我喜欢Linux的开源理念,但我没有足够的知识或者心愿去学习并复制我的Windows系统设置。Windows可以直接使用,我使用XP/7,并且现在新Windows操作系统的选项卡式布局让我觉得我可能永远都不会离开它们了。 - NOP da CALL
1
GTK+ 可在以下平台上使用:Windows。为什么我需要学习 Linux 呢?如果你能给我提供链接,指向 GTK+ 网站上关于如何使用 msys2 在 Windows 上安装软件包的指南,我将非常感激,因为我找不到它。 - NOP da CALL
1
这就是我想的,一个告诉你需要什么但不告诉你如何获得它的页面。它对通过 msys2 获取所需包没有任何指导,只是将它们指向,并以此结束。 “在 Windows 中获取 GTK+及其依赖项的首选方法是使用 MSYS2 项目。您可以在本文中找到更多信息。” 阅读了完整的文章以安装 msys2,在 OP 中提到的 GTK 上没有提及。 - NOP da CALL
2
这里唯一的喷子是redFIVE。请忽略他。 - andlabs
显示剩余2条评论
5个回答

45

欢迎来自未来的Google用户!自从我写这个答案以来,GTK+网站现在有官方安装说明,覆盖了我下面所说的内容,但更详细,更少痛苦。请参考该页面。以下答案仅出于历史原因而被保留。

GTK+网站的问题在于没有人维护这些二进制发行版。Windows的上一个二进制发行版是针对GTK+ 3.6的,我认为这是在2012年发布的,如果不是更早。当前版本是3.16,3.18就要发布了,几乎只有几天的时间。MSYS2是唯一支持的安装机制,并且更新频率足够高。

话虽如此,如果您使用MSYS路径,则需要单独安装GTK+;MSYS默认情况下不带GTK+。从以下开始:

pacman -Ss gtk3

这将为您提供一个可能的软件包列表,包括32位和64位MinGW的GTK+库。我现在忘记它们确切的名称了。
一旦找到您想要的那个,使用以下命令:
pacman -S package-name-here

要安装它。然后,从开始菜单的MSYS文件夹中打开MinGW 32位或64位Shell开始开发。

如果您想要一个传统的GTK+编程IDE,请查找GNOME Builder或Anjuta。对于图形GUI设计师,请查找Glade。


5
太好了,我知道这对于懂Linux的人来说肯定是一件简单的事情。我实际上成功找到了Windows 3.6.4下载地址http://win32builder.gnome.org/gtk+-bundle_3.6.4-20130921_win32.zip,目前看来它似乎可以正常工作,而不需要像你展示的那样使用msys2。但一个Windows用户该怎么知道这一点呢?Windows GTK页面应该被更新以提供更清晰的说明。如果我遇到任何问题,我会尝试用你给出的方法重新安装,但希望不必这样做。感谢您的建议,我打算试试Glade。 - NOP da CALL
2
不要使用捆绑包,它们都已经过时了。使用MSYS2,因为GTK+开发人员说这是在Windows上支持的。自从那个答案被写下来以来,我重写了安装说明。您现在应该能够按照官方说明无痛安装GTK+了:https://www.gtk.org/download/windows.php - liberforce
@liberforce 很好!我已经更新了答案,加入了这个新信息。 - andlabs
4
那么,我如何在不安装另一个下载器和 IDE 的情况下使用 GTK+ 工具包,而且不会占用我的450MB硬盘空间?另外,我已经在硬盘上安装了MinGW,我真的需要再复制一份吗?我想使用Code::Blocks、Eclipse或NetBeans,我已经在电脑上安装了它们。我理解下载器背后的哲学,它可以提供最新和最好的内容,但实际上这只是一个糟糕的想法。我的电脑越来越被下载器、编译器和IDE污染,让我感到非常困扰。我只想生产一些可以赚钱的东西,而不是花费一天时间学习新东西。 - Cool Javelin
1
我按照指示操作,但是当我尝试使用CMake构建我的项目时,出现了以下错误:“未找到包'gtk+-3.0'”。可能的问题是什么,我该如何解决? - user7948550
仅供参考:与其安装MSYS2并假装你在Windows中有一个类似Linux的环境,我建议安装WSL,然后在其中安装真正的Linux发行版。这对于开发人员和最终用户都是如此。 - am70

12

哈利路亚,我已经找到了一个非Linux版本的获取Windows GTK的方法。

有人很友好地将GTK文件上传到了Dropbox,只需下载并提取即可。这是链接,供其他遇到GTK/msys2问题的人使用。

https://www.dropbox.com/sh/8d1qbh5dsp044on/UgkALzhlqH

这些文件应该在GTK Windows下载页面上提供,真是难以置信。

关闭此主题,Viva Windows。


3
事实上,这正是GTK的开发人员不希望传达的,以便使用GTK开发应用程序并想要分发它们的人们知道他们需要什么。 - liberforce
2
请原谅我的无知,但是为什么这篇帖子被踩了呢?GTK现在在Windows上有二进制文件不是一件好事吗? - Freddy Pierson
14
不确定为什么这个被投反对票,但我真的希望它来自于一个比Dropbox链接更具权威性的来源…… - Fabio Zadrozny
@FabioZadrozny 抱歉,我来晚了。我相信这是原始帖子。https://dev59.com/_m025IYBdhLWcg3wblc3#22522417 - Wesley
5
这段话的意思是因为从网络上的一个不可信的随机位置获取东西是很愚蠢的,所以它被投票踩了。这就是GTK+团队指向MSYS2项目的原因。如果GTK+信任MSYS2,而你信任GTK+,那么你应该也信任MSYS2。 - liberforce

7

我认为GNOME社区在某种程度上有些傲慢。 他们使得GTK+的安装与Linux安装几乎相同,这有点像在麦当劳给你百事可乐。

更糟糕的是,他们强迫你使用他们自己的东西,甚至告诉你选择哪个IDE,如何构建你的应用程序以及应用程序中会有什么..(没有个人恩怨,我实际上总是更喜欢Linux,我只是不偏不倚)


现在具体来说,你明确提到了Codeblocks。 不要使用code::block的GTK+项目,它非常过时。 当然,你可以修改脚本或者创建你自己的脚本,但这仍然会让你变慢, 而我们编程人员珍视时间(我想)

在windows 7上安装GTK3 ver. 3.22.16并与Code::Blocks一起使用的过程非常简单。 首先下载MSYS2并在msys2 shell内输入:

pacman -S mingw-w64-x86_64-gtk3

(输入y确认) 然后

pacman -S mingw-w64-x86_64-toolchain base-devel (确保你有pkg-config的预编译二进制文件,并确保你有最新版本的gcc)

然后在CodeBlocks中进行一些设置,首先 从Codeblocks的编译器设置 -> 工具链可执行文件中设置新的编译器。这个新编译器应该位于C:\msys64\mingw64 (C或者你安装MSYS的磁盘)

然后在Codeblocks的编译器设置 -> 搜索目录中链接一些库: enter image description here 这些库足以运行这个简单的示例代码:

#include <gtk/gtk.h>

static void activate (GtkApplication* app, gpointer user_data)
{
    GtkWidget *window;

    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW (window), "Window");
    gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
    gtk_widget_show_all(window);
}

int main (int argc, char *argv[])
{
    GtkApplication *app;
    int status;

    app     = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "activate", G_CALLBACK (activate), NULL);
    status  = g_application_run(G_APPLICATION (app), argc, argv);
    g_object_unref(app);

    return status;
}

并且需要得到这样的结果:在此输入图片描述


谢谢你的回答,但我最终成功地没有破坏 Linux,并已经专门使用它一段时间了。万岁 Linux,万岁 Python。 - NOP da CALL
@NOPdaCALL,你做得很好。考虑到这更像是一个移植到Windows的Linux项目。 - Edenia
1
我也怀疑你已经正确地处理了它。 然而,仍有人想知道如何在Windows上轻松安装它。 最新版本非常不同,更加紧凑,结构更好,改进得相当不错。 - Edenia
你说:“我同意GNOME社区到目前为止有点傲慢。他们使得GTK+的安装几乎与Linux的安装相同,这有点像在麦当劳给你百事可乐。” GTK+是一个开源项目,每个人都可以贡献。但如果Windows开发者不参与,那么就没有人来完成这项工作,GNOME开发者将做更容易的事情以满足他们有限的资源。将构建系统切换到Meson构建系统将有望使GTK+ 4更容易集成到Windows上。 - liberforce

2

几天前,我给 GTK 维护者之一发了一封电子邮件,请求在 vs 2017 上的帮助,以下是信件内容。之后,我选择在 Windows 上使用 GTK 2.0。

这是我的邮件

我安装了 msys2,并且我注意到,在 .\msys64\mingw64\include 文件夹下有许多头文件。因此,我想知道是否可以直接在 vs 2017 中包含这些文件夹下的文件,并让 vs 2017 使用文件夹下的库,像这样......

这是他的回复

首先,我不建议使用 msys 构建,除非你确定: -你不会尝试在你的代码中使用 GLib 等使用的 FILE 结构。 -你正在使用的 glibconfig.h 与你所使用的 GLib 版本源代码 tarball 中的 glibcocnfig.h.win32 匹配,因为所有构建于 GLib 之上的东西都会受到影响。

如果你仍然决定采用这种方法,你需要在链接时指定库。请参见 链接器->输入->附加依赖项,你至少需要以下以分号分隔的 .lib 文件

gtk-3.0.lib(或 gtk-3.lib)

gdk-3.0.lib(或 gdk-3.lib)

gdk_pixbuf-2.0.lib

pangocairo-1.0.lib

pango-1.0.lib

atk-1.0.lib

gio-2.0.lib

gobject-2.0.lib

gmodule-2.0.lib

glib-2.0.lib

cairo-gobject.lib

cairo.lib

intl.lib

可能还需要链接 fontconfig.libfreetype.lib,因为 msys64 构建中可能包含这些支持。

你还需要链接任何用于你的任务的其他库,在 %(AdditionalDependencies) (不要删除 %(AdditionalDependencies)) 前添加分号。

祝福和干杯!

好的...我花了几天时间将我的程序移植到Windows上,在与gtk 3.x斗争之后,我发现您可以使用gtk 2.x来避免所有这些麻烦。这些是一些旧文件,称为All-in-one bundle,虽然重要的是要知道它存在一些安全问题(此外,您需要将其重写为gtk 2.0),但如果您主要使用Linux,并且只想在Windows上运行它,我建议您使用旧的All-in-one bundle for gtk 2.x。例如:https://download.gnome.org/binaries/win32/gtk+/2.24/gtk+-bundle_2.24.10-20120208_win32.zip.mirrorlist

谢谢,但我必须说这是非常普遍的任务。如果你不知道如何将一堆库文件添加到你的项目中,并且知道你不应该在API边界(DLL文件 - 现在不再需要通用C运行时)之间传递FILE和其他结构体,那么你就需要重新学习Windows上的C编程基础了。 - Lothar
@Lothar 抱歉,我从未学习过关于 Windows 上的编程知识。我认为这个 msys2 构建适合直接使用,并解决了所有 API 问题。 - Y00
顺便说一下,GTK 2.0提供了对Windows的支持,并且据我所知,可以通过API边界传递FILE和其他结构。很抱歉打扰你,因为我不知道任何关于在Windows上编程的事情,我知道这对你们来说很愚蠢。 - Y00

1
如果你正在寻找除了Msys2之外提供最新的、与MSVC兼容的GTK3内容的项目,你应该检查 gvsbuild 和Microsoft的vcpkg。 在幕后,前者使用python,后者使用cmake。

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