在Windows 10上安装GTK以用于Code :: Blocks

时间:2018-04-12 01:42:21

标签: gtk codeblocks msys2

原始问题

我无法安装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 \原子\ BIN;%USERPROFILE%\应用程序数据\本地\微软\ 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的特定路径变量有关,我想?但它应该在之后搜索系统的路径?而且我不知道如何改变这条特定的道路?可能是另一天的问题。

所以类似的堆栈溢出,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

程序暂停。我认为这意味着关闭窗口。我做了,然后单击确定进行对话"进程正在运行中:无论如何关闭?。"现在打印窗口"收到挂断信号"它不再响应。我使用任务管理器来杀死它。

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

Ran 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:命令未找到。"所以我运行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核心的结果似乎也无关紧要。

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.

Ran" 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"看到我觉得我需要的两个包裹。 Ran" pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-gtkmm3"

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

其中:没有gcc 在(在/ usr / local / bin目录:在/ usr / bin中:/斌:/选择/斌:/ C /的Windows / System32下: /c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/: 的/ usr /斌/ 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。去设置>编译器...确保使用Selected compiler下的下拉框选择GNU GCC Compiler,并在我第一次安装Code :: Blocks时因为复杂而单击Reset Defaults。编译器标志下的复选框应该在重置后全部为空,因此我检查了#34;让g ++遵循C ++ 14 ISO C ++语言标准[-std = c ++ 14]"在General和"启用所有常见的编译器警告(覆盖许多其他设置)[-Wall]"在警告下。

在Compiler Flags的旁边,我转到了链接器设置并将文本添加到其他链接器选项。我通过运行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编译,现在已经足够好了。

1 个答案:

答案 0 :(得分:1)

好的,让我们从头开始。

  1. 不要使用tarnyko套餐,它们已经过时而不再维护
  2. 在Windows上获取GTK + 3的官方方法是通过MSYS2
  3. 不要盲目跟随您在互联网上找到的每一个指南,将它们混合在一起并期望事情能够发挥作用。事情发生了变化,在某些时候做广告的事情在你阅读时可能已经过时而且完全错误。如果您同时烹饪含有3种不同食谱的菜肴,请不要期待它的味道好。
  4. 所以:

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