安装 GTK 以便在 Windows 10 上的 Code::Blocks 中使用

Installing GTK for use in Code::Blocks on Windows 10

原问题

我在安装 gtk 以开始在 Code::Blocks 上用 C++ 构建 GUI 时遇到问题。谁能把我推向正确的方向?我在 Lenovo 上 运行ning Windows 10(64 位)。

我尝试了安装指南 (https://www.youtube.com/watch?v=jvQXvTtSIQo), stack overflow (), the official GTK installation guide (https://www.gtk.org/download/windows.php), a written guide (http://www.tarnyko.net/repo/gtk3_build_system/tutorial/gtk3_tutorial.htm), and just noticed a very similar stack overflow ()

在此之前我的PATH环境变量只记录了C:\Users\Owner\AppData\Local\Microsoft\WindowsApps;C:\Users\Owner\AppData\Roaming\npm;C:\Users\Owner\AppData\Local\atom\bin;%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

我从 mingw.org 下载了 MinGW。这是对youtubelink的评论说官方比Code::Blocks可以安装的稳定。我将 C:\MinGW\bin 添加到 PATH。

尝试官方 GTK 安装站点,我下载了 MSYS2 并使用 pacman -Syu 安装核心系统包,然后使用 pacman -Su 进行更新。到此为止,所以我认为 gtk 已正式安装,我只需要让它与 Code::Blocks 通话即可。我将 C:\msys64\mingw64\bin 添加到 PATH 但这似乎不起作用。

我尝试在 http://www.tarnyko.net/dl/gtk.htm 安装 GTK 3.6.4 的一体式包,并将其解压缩到 C:\gtk。我现在在 PATH 中有 C:\gtk\bin。 GTK 应该以一种或另一种形式出现在我的道路上。我可以 运行 gtk3-demo 和 gtk-demo-application 从 CMD 但不是 MSYS2。我对此有点困惑。我想这可能与 MSYS2 的特定路径变量有关?但是它应该在之后搜索系统的 PATH 吗?而且我不知道如何更改该特定路径?可能改天再问。

所以类似的stack overflow,youtube,写的教程都说用pkg-config --cflags --libs gtk+-3.0来检查合理的输出,看看我是否正确安装了gtk。我安装了 pkg-config-lite 以避免 How to install pkg config in windows? 描述的 glib 循环依赖问题和 f运行kly 我不明白。我将它添加到 C:\MinGW\bin 到我的路径中。现在我可以 运行 它了,但是得到:

Package gtk+-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtk+-3.0' found

我试过 3.6.4 而不是 3.0。没有骰子。我只试了 3 个。不。我只能找到 gtk3 文件,而不是我在任何地方安装的实际版本。 pkg-config --cflags --libs 说我需要命名一个库,所以我只尝试 gtk hopiing 来获取包含它的库。没有。其余教程旨在让 Code::Blocks 编译器(我认为)包含 gtk。我希望这是唯一的障碍,我将能够得到休息。但是,如果有人可以帮助我完成其余的工作,我将不胜感激。

在这一点上我没有想法。有人可以帮助我吗?

感激不尽, 约翰

Liberforce 回答后的更多问题

感谢您写下https://www.gtk.org/download/windows.php!!我敢打赌它能帮助很多像我一样沮丧的新手。一切正常后,我会提供更适当的反馈。如果您能提供更多帮助,我一直在编译 C/C++ 程序。在开始之前,我想非常清楚我采取的具体步骤。步骤名称与您的书面说明相对应。

第 1 步:安装 MSYS2

好的,正在重置所有内容...

从 PATH 和计算机中删除了 C:/gtk 目录,也就是所有的 tarnyko 文件。

从 PATH 和计算机中删除了 C:/MinGW 目录,有效卸载。我读了你与 Simon ( and https://chat.whosebug.com/rooms/156828/discussion-between-liberforce-and-simon) 的谈话,内容是关于包含 msys1.0 的 MinGW 终端和包含 MinGW 的 MSYS2 终端之间的混淆。我认为这样会更安全。

因此,我在 PATH 中只有 C:\msys64(以及我之前拥有的,与 GTK 无关)。

已卸载 MSYS2(通过 Add/Remove 程序)并使用来自 www.msys2.org 的 x86_64 重新安装。在 pacman -Syu 上,我收到错误消息,"msys2-runtime and catgets are in conflict" 和 "msys2-runtime and libcatgets are in conflict." 输入 y 以删除两者。

我一直在卸载和重新安装,但我遇到了以下问题...(5/5) 升级 pacman 是在 100% 并弹出警告: 警告:终止 MSYS2 而不返回 shell 并再次检查更新 警告:例如关闭终端 window 而不是调用 exit

程序到此停止。我假设这意味着关闭 window。我这样做了,然后单击确定对话框 "Processes are running in session: Close anyway?." Window 现在打印 "Hangup signal received" 并且它不再响应。我使用任务管理器来杀死它。

在第一个 pacman -Syu 给了我选择 shell 的对话框后,通过桌面应用程序打开 MSYS2:MSYS2,Mingw-w64 32 位,Mingw-w64 64 位。我改为进入文件系统并为所有未来实例打开 C:\msys64\msys2_shell.cmd。

运行 pacman -Syu 完成安装包。我再次重启 MSYS2,然后 运行 pacman -Su 显示

:: Starting core system upgrade...
 there is nothing to do
:: Starting full system upgrade...
 there is nothing to do

pacman -Syuu 显示:

:: Synchronizing package databases...
 mingw32 is up to date
 mingw64 is up to date
 msys is up to date

pacman -Su、pacman -Sy 和 pacman -Suu 同样显示一切正常。关闭并重新打开 C:\msys64\msys2_shell.cmd

pkg-cofig 只给出 "bash: pkg-config: command not found." 所以我 运行 pacman -S pkg-config 让它工作了。但是,https://github.com/msys2/msys2/wiki/MSYS2-installation 中提到的 update-core 找不到,pacman -S update-core 将不起作用。 pacman -Ss 核心出现:

msys/coreutils 8.26-2 (base) [installed]
The basic file, shell and text manipulation utilities of the GNU operating
system

和其他看似无关的文件。 pacman -Ss core 的结果同样似乎无关紧要。

pacman --version 显示:

 .--.                  Pacman v5.0.1 - libalpm v10.0.1
/ _.-' .-.  .-.  .-.   Copyright (C) 2006-2016 Pacman Development Team
\  '-. '-'  '-'  '-'   Copyright (C) 2002-2006 Judd Vinet
 '--'
                       This program may be freely redistributed under
                       the terms of the GNU General Public License.

运行 "pacman --needed -S bash pacman pacman-mirrors msys2-runtime" 揭示:

warning: bash-4.4.019-2 is up to date -- skipping
warning: pacman-5.0.1-5 is up to date -- skipping
warning: pacman-mirrors-20160112-1 is up to date -- skipping
warning: msys2-runtime-2.10.0-2 is up to date -- skipping
 there is nothing to do

我退出了所有 msys shells,和 运行 C:\msys64\autorebase.bat,尽管不是在 32 位系统上。我相信当它说重新打开 msys2_shell.bat 时有错字,我没有。我打开了 msys2_shell.cmd。我再次使用 pacman -Suu 来显示一切正常。

第 2 步 -> 第 5 步(可选):安装构建工具

Openned C:\msys64\msys2_shell.cmd and 运行 "pacman -S mingw-w64-x86_64-gtk3" (GTK+3 package) and "pacman -S mingw-w64-x86_64-toolchain base-devel" (package to develop GTK+3 applications in other languages) (出现提示时默认为所有安装)。

未能编译 GTK+3 应用程序

重新启动计算机。打开 C:\msys64\msys2_shell.cmd。关注 https://developer.gnome.org/gtk3/stable/gtk-getting-started.html.

将简单的 window 教程文件放在 C:\Users\Owner\Desktop\test_code\example-0.c 中。当 运行ning gcc pkg-config --cflags gtk+-3.0 -o example-0 example-0.c pkg-config --libs gtk+-3.0 时,出现了我原来问题中的错误。使用 "pacman -Ss gtk3" 看到我认为我需要的两个包。 运行 "pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-gtkmm3" .

为了在 向 Simon 回答关于同一错误的问题,pkg-config --list-all | grep gtk returns 什么也没有,即使在关闭并重新打开 C:\msys64\msys2_shell.cmd 之后也是如此。 "which gcc" returns:

其中:没有 gcc 在(/usr/local/bin:/usr/bin:/bin:/opt/bin:/c/Windows/System32: /c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/: /usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)

我在 C:\msys64\mingw64\include 下看到了 gtk-3.0。我不知道如何将其添加到路径中。 "echo $PKG_CONFIG_PATH" returns:

/usr/lib/pkgconfig:/usr/share/pkgconfig:/lib/pkgconfig

使用 GTK+3 在控制台中正确编译了一个文件

检查 GTK 是否在控制台中

我需要在 Mingw-w64 64 位 shell 中打开 MSYS2。这可以通过 MSYS2 的桌面应用程序执行,它会提示您要打开三个 shell 中的哪一个:MSYS2、Mingw32 和 Mingw64。具体来说,我用命令 mingw-w64-x86_64-toolchain 安装 gtk 意味着它只能通过这种方式访问​​。

这个 shell 中的命令表明我确实有 gtk:

$ pkg-config --modversion gtk+-3.0 --> 3.22.29

$ which gcc --> /mingw64/bin/gcc

从 Mingw64 控制台编译示例代码

我参考了https://github.com/msys2/msys2/wiki/MSYS2-introduction来学习文件系统/驱动器挂载语法。我将从 https://developer.gnome.org/gtk3/stable/gtk-getting-started.html 中获取的示例代码放在 `/c/Users/Owner/Desktop/test_code/example-0.c' 中。我只是使用了我最喜欢的 IDE、Atom,但任何文本编辑器都可以。

打开 MSYS2 的 Mingw64 shell, cd /c/Users/Owner/Desktop/test_code/ , 用 gcc \pkg-config --cflags gtk+-3.0` -o example-0 example-0.c 编译`pkg-config --libs gtk+-3.0`` ,然后用 ./example-0

执行

不成功 Link GTK+3 和​​ Code::Blocks 编译器

我了解一些 Linker 设置

我进入了Code::Blocks。转到设置 > 编译器...确保使用选定编译器下的下拉框 select GNU GCC 编译器,并单击重置默认值,因为当我第一次安装 Code::Blocks 时很复杂。 Compiler Flags 下的复选框在重置后应该全部空白,因此我在 General 下选中了 "Have g++ follow the C++14 ISO C++ language standard [-std=c++14]",在 Warnings 下选中了 "Enable all common compiler warnings (overrides many other settings) [-Wall]"。

在显示编译器标志的位置旁边,我转到 Linker 设置并将文本添加到其他 linker 选项。我通过 运行ning pkg-config --cflags gtk+-3.0:

得到了这篇文章
-mms-bitfields -pthread -mms-bitfields -IC:/msys64/mingw64/include/gtk-3.0 -IC:/msys64/mingw64/include/cairo -IC:/msys64/mingw64/include -IC:/msys64/mingw64/include/pango-1.0 -IC:/msys64/mingw64/include/fribidi -IC:/msys64/mingw64/include/atk-1.0 -IC:/msys64/mingw64/include/cairo -IC:/msys64/mingw64/include/pixman-1 -IC:/msys64/mingw64/include -IC:/msys64/mingw64/include/freetype2 -IC:/msys64/mingw64/include -IC:/msys64/mingw64/include/harfbuzz -IC:/msys64/mingw64/include/libpng16 -IC:/msys64/mingw64/include/gdk-pixbuf-2.0 -IC:/msys64/mingw64/include/libpng16 -IC:/msys64/mingw64/include -IC:/msys64/mingw64/include/glib-2.0 -IC:/msys64/mingw64/lib/glib-2.0/include -IC:/msys64/mingw64/include -LC:/msys64/mingw64/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32 -lz -lpangowin32-1.0 -lpangocairo-1.0 -lpango-1.0 -lfribidi -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl

说明:从控制台编译时,我使用了包含文本 /pkg-config --cflags gtk+-3.0`` 的命令。反引号表示在更高级别的编译命令之前 运行 pkg-config --cflags gtk+-3.0 ,并将出现的任何文本插入到更高级别的编译命令中。 Code::Blocks 需要 Linker 设置下的文本。

我不明白搜索目录

在“设置”>“编译器...”中,在显示“编译器设置”的位置旁边,我单击了“搜索目录”。我知道你需要在这里做一些工作。在此之后,您返回 Linker 设置完成,您的 Code::Blocks 就可以开始了!

如果有人能在这里帮助我,或者如果我弄明白了,我很乐意完成,以防这对后代有所帮助。我有 GTK 编译,现在已经足够好了。

好吧,让我们从头说起。

  1. 不要使用 tarnyko 包,它们已经过时且不再维护
  2. 在 Windows 上获取 GTK+ 3 的官方方法是通过 MSYS2
  3. 不要盲目遵循您在 Internet 上找到的所有指南,将它们混合在一起并期望一切正常。事情发生了变化,在某些时候发布的广告在您阅读时可能已经过时并且完全错误。如果你用 3 种不同的食谱同时做一道菜,别指望它会很好吃。

所以:

  1. 删除 tarnyko 包的所有残余
  2. 删除 pkg-config-lite。 pkg-config 已经通过 MSYS2 安装,如果您按照官方安装
  3. 尝试在没有 Code::Blocks 集成的情况下使用 MSYS2 指南(pkg-config 检测,并编译一个简单的 GTK+ 程序)先工作
  4. 一旦成功,让它在 Code::Block 上运行应该是设置一些环境变量并指向正确的 pkg-config 的问题。

我在 Windows 7 上使用了 gtk+ bundle_2.24.10 32 位。 我是从 tarnkos 下载的,不需要在代码块 17.12 中更改单个设置。