【问题标题】:Installing GTK for use in Code::Blocks on Windows 10在 Windows 10 上安装 GTK 以用于 Code::Blocks
【发布时间】:2018-09-22 00:37:29
【问题描述】:

原始问题

我在安装 gtk 以开始在 Code::Blocks 上用 C++ 构建 GUI 时遇到问题。任何人都可以将我推向正确的方向吗?我在联想上运行 Windows 10(64 位)。

我尝试了安装指南 (https://www.youtube.com/watch?v=jvQXvTtSIQo)、堆栈溢出 (How do you install GTK+ 3.0 on Windows?)、官方 GTK 安装指南 (https://www.gtk.org/download/windows.php)、书面指南 (http://www.tarnyko.net/repo/gtk3_build_system/tutorial/gtk3_tutorial.htm),并且刚刚注意到一个非常相似的堆栈溢出(Install GTK for c on Windows 10?)

在此之前,我的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。这是对 youtube 链接的评论,官方比可以使用 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 应该以一种或另一种形式出现在我的道路上。我可以从 CMD 运行 gtk3-demo 和 gtk-demo-application,但不能从 MSYS2 运行。我对此有点困惑。我认为这可能与 MSYS2 的特定路径变量有关?但它应该在之后搜索系统的 PATH 吗?而且我不知道如何更改该特定路径?可能是另一天的问题。

所以类似的堆栈溢出、youtube 和书面教程都说要使用pkg-config --cflags --libs gtk+-3.0 检查合理的输出以查看我是否正确安装了 gtk。我安装了 pkg-config-lite 以避免How to install pkg config in windows? 描述的 glib 循环依赖问题,坦率地说我不明白。我将它添加到 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(Unable to compile code with GTKhttps://chat.stackoverflow.com/rooms/156828/discussion-between-liberforce-and-simon)关于 MinGW 终端(包括 msys1.0)和 MSYS2 终端(包括 MinGW)之间的混淆的对话。我想这会更安全。

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

卸载 MSYS2(通过添加/删除程序)并使用来自 www.msys2.org 的 x86_64 重新安装。在 pacman -Syu 上,我收到错误,“msys2-runtime 和 catgets 发生冲突”和“msys2-runtime 和 libcatgets 发生冲突”。输入 y 删除两者。

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

程序在这里停止。我认为这意味着关闭窗口。我做到了,然后单击“确定”对话框“进程正在会话中运行:仍然关闭?”。窗口现在打印“收到挂断信号”并且不再响应。我使用任务管理器来杀死它。

在第一个 pacman -Syu 之后通过桌面应用程序打开 MSYS2 给了我选择哪个 shell 的对话框: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 中提到的更新核心,并且 pacman -S update-core 将不起作用。 pacman -Ss core 出现:

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 shell,并运行了 C:\msys64\autorebase.bat,虽然不是在 32 位系统上。我相信当它说要重新打开 msys2_shell.bat 时有一个错字,我没有。我打开了 msys2_shell.cmd。我再次使用 pacman -Suu 表明一切正常。

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

打开 C:\msys64\msys2_shell.cmd 并运行“pacman -S mingw-w64-x86_64-gtk3”(GTK+3 包)和“pacman -S mingw-w64-x86_64-toolchain base-devel”(包开发其他语言的 GTK+3 应用程序)(提示时默认为所有安装)。

无法编译 GTK+3 应用程序

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

将简单的窗口教程文件放在 C:\Users\Owner\Desktop\test_code\example-0.c 中。运行 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”。

要在 Unable to compile code with GTK 上回答您对 Simon 关于同样错误的问题,pkg-config --list-all | grep gtk 不会返回任何内容,即使在关闭并重新打开 C:\msys64\msys2_shell.cmd 之后也是如此。 “哪个 gcc”返回:

其中:没有 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" 返回:

/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 执行

链接 GTK+3 和​​ Code::Blocks 编译器失败

我了解一些链接器设置

我进入了 Code::Blocks。转到 Settings > Compiler... 确保使用 Selected compiler 下的下拉框来选择 GNU GCC Compiler,并在我第一次安装 Code::Blocks 时由于复杂性而单击了 Reset Defaults。编译器标志下的复选框在重置后应该全部为空白,因此我在常规和“启用所有常见的编译器警告(覆盖许多其他设置)[-Wall]”在警告下。

在编译器标志旁边,我转到链接器设置并将文本添加到其他链接器选项。我通过运行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 需要链接器设置下的该文本。

我不了解搜索目录

在“设置”>“编译器...”中,在“编译器设置”旁边,我单击了“搜索目录”。我知道你需要在这里做一些工作。在此之后,您返回链接器设置完成,您的 Code::Blocks 将准备就绪!

如果有人可以在这里帮助我,或者如果我弄清楚了,我很乐意完成,以防这有助于后代。我有 GTK 编译,现在已经足够了。

【问题讨论】:

    标签: gtk codeblocks msys2


    【解决方案1】:

    好的,让我们从头开始。

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

    所以:

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

    【讨论】:

    • 顺便说一句,我写了GTK+ 3通过MSYS2安装的详细说明,请随时提供一些反馈。请记住,我只能说该做什么,而不是人们应该做什么......
    • 非常感谢。我仍然遇到错误,所以坚持你的步骤#3:编译一个简单的 GTK+ 程序。我已经编辑了我的问题,以更清楚地了解正在发生的事情,希望您能提供帮助。
    • 感谢您的详细更新。找不到gcc不正常,应该是pacman -S mingw-w64-x86_64-toolchain base-devel安装的。我还认为您需要运行Mingw-w64 64 bit shell,而不是 MSYS。例如,您可以通过运行msys2_shell.cmd -mingw64 或使用other methods 来做到这一点。进入 MinGW64 shell 后,运行 which gccpkg-config --modversion gtk+-3.0 并在此处发布结果。谢谢。
    • $ pkg-config --modversion gtk+-3.0 --> 3.22.29 , $ which gcc --> /mingw64/bin/gcc 我运行了 MSYS2 的桌面快捷方式并选择了 Mingw-w64 64 位。我想这就是在正确的区域寻找所需的全部内容。关于编译路径的问题......我如何才能路径到桌面上的文件?如何在 Mingw64 主目录之上,转到 C:\Users\Owner\Desktop ?我需要将文件粘贴在 Mingw64 目录中吗?我会使用命令:gcc `pkg-config --cflags gtk+-3.0` -o example-0 example-0.c `pkg-config --libs gtk+-3.0`
    • 我给你的两个命令都成功了,所以编译器找到了,GTK+的开发文件也找到了,所以现在应该可以编译了。至于桌面,我不知道,这些天我不使用 MSYS2,但我认为在桌面上有文件无论如何都是一个坏主意。我是 GNOME 3 的快乐用户,多年来桌面上没有图标:)。这是一个完全独立的问题。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      相关资源
      最近更新 更多