编译器错误 "unkown type name 'GtkWidget" Code::Blocks
Compiler error "unkown type name 'GtkWidget" with Code::Blocks
我知道和这个类似的问题,不是这个;虽然我的情况非常相似。当您打开一个新的 GTK 项目时,Code::Blocks“Hello World”程序的前 4 行是这样的:
#include <stdlib.h>
#include <gdk/gdk.h>
static void helloWorld (GtkWidget *wid, GtkWidget *win)
编译器构建日志如下(标记了该类型的每个实例,为简洁起见,我只包含第一个实例):
-------------- Build: Debug in graphics project (compiler: GNU GCC Compiler)---------------
gcc -Wall -g -I/usr/include/gtk-4.0/ -I/usr/include/glib-2.0/ -I/usr/lib64/glib-2.0/include/ -I/usr/include/cairo/ -I/usr/include/pango-1.0/ -I/usr/include/harfbuzz/ -I/usr/include/gdk-pixbuf-2.0/ -c "/home/********/Documents/graphics project/main.c" -o obj/Debug/main.o
gcc -o "bin/Debug/graphics project" obj/Debug/main.o
/home/********/Documents/graphics project/main.c:4:25: error: unknown type name ‘GtkWidget’
4 | static void helloWorld (GtkWidget *wid, GtkWidget *win)
| ^~~~~~~~~
什么?!? GTK 文档指出 'GtkWidget' 是 darn near everything 的基础 class。坦率地说,我不知道这怎么可能。作为解释,这里的一千零一个 -I(如在印度)目录是因为出于某种原因,当我通过命令行安装 GTK4 工具包时,它在 /usr/include 的子文件夹中放置了相当多的依赖项/ 目录,当然你不能告诉编译器搜索所有子文件夹。我用来安装 GTK 的具体命令是
sudo yum install gtk4-devel
并且我在 Fedora 35 工作站上 运行 Code::Blocks 版本 20.03 和 gcc-c++-11.2.1-9.fc.35.x86_64,如果有的话这些事情在这里有所作为。我什至卸载了 GTK4 并重新安装它,只是想看看是否能修复它——不。我对一般编程特别是 GUI 非常陌生,我基本上只是想在没有任何特定目标的情况下搞砸“Hello World”程序。我只是想学习。但这种事情让我从尝试学习编程的第一分钟起就一直感到无尽的悲伤,而这次我无法 Google 回答。哦好吧,一切都是第一次。
一段时间以来,我主要在各种 GTK3 和 GTK4 项目中使用代码块。我还对 IDE 进行了一些调整,因为它与构建 GTK3 或 GTK4 项目有关,因此为了记住带有代码块的“vanilla”GTK 项目是什么样的,我安装了 IDE在虚拟 Linux Mint 机器上启动了一个新项目。与您一样,选择“GTK”作为我的项目类型,IDE 在“main.c”文件中生成了样板“Hello World”程序。但是,我立即注意到在我的机器上生成的代码与您上面的示例之间存在一个差异。 “包含”文件集有所不同。您的集合包含以下内容:
#include <stdlib.h>
#include <gdk/gdk.h>
static void helloWorld (GtkWidget *wid, GtkWidget *win)
在我的机器上前三行代码如下:
#include <stdlib.h>
#include <gtk/gtk.h>
static void helloWorld (GtkWidget *wid, GtkWidget *win)
如果确实,您的代码块版本引用了 GDK 库(其中包含对象的信息,例如 cairo 信息,而不是小部件信息),您可能需要修改对“include”文件的引用 .另一件需要注意的事情是,在代码块的“vanilla”版本中,代码块 20.03 版本的 GTK 版本引用了 GTK2 库和构建过程的配置。如果您碰巧打开项目的构建信息,您可能会在“其他编译器选项”下看到如下构建设置:
`pkg-config gtk+-2.0 --cflags`
并且,在链接器选项下,您可能会找到如下所示的库设置:
`pkg-config gtk+-2.0 --libs`
因此,如果您的系统上没有 GTK2 库,您的代码可能无法编译。 Linux Mint 默认安装了 GTK2 库。我不知道 Fedora 是否这样做。
因此,对于您最初的“Hello World”项目和后续项目,您可能只需修改对 的“include”文件引用,然后查看程序是否会生成。
我希望解释能为您澄清一些事情。
此致。
我知道和这个类似的问题,不是这个;虽然我的情况非常相似。当您打开一个新的 GTK 项目时,Code::Blocks“Hello World”程序的前 4 行是这样的:
#include <stdlib.h>
#include <gdk/gdk.h>
static void helloWorld (GtkWidget *wid, GtkWidget *win)
编译器构建日志如下(标记了该类型的每个实例,为简洁起见,我只包含第一个实例):
-------------- Build: Debug in graphics project (compiler: GNU GCC Compiler)---------------
gcc -Wall -g -I/usr/include/gtk-4.0/ -I/usr/include/glib-2.0/ -I/usr/lib64/glib-2.0/include/ -I/usr/include/cairo/ -I/usr/include/pango-1.0/ -I/usr/include/harfbuzz/ -I/usr/include/gdk-pixbuf-2.0/ -c "/home/********/Documents/graphics project/main.c" -o obj/Debug/main.o
gcc -o "bin/Debug/graphics project" obj/Debug/main.o
/home/********/Documents/graphics project/main.c:4:25: error: unknown type name ‘GtkWidget’
4 | static void helloWorld (GtkWidget *wid, GtkWidget *win)
| ^~~~~~~~~
什么?!? GTK 文档指出 'GtkWidget' 是 darn near everything 的基础 class。坦率地说,我不知道这怎么可能。作为解释,这里的一千零一个 -I(如在印度)目录是因为出于某种原因,当我通过命令行安装 GTK4 工具包时,它在 /usr/include 的子文件夹中放置了相当多的依赖项/ 目录,当然你不能告诉编译器搜索所有子文件夹。我用来安装 GTK 的具体命令是
sudo yum install gtk4-devel
并且我在 Fedora 35 工作站上 运行 Code::Blocks 版本 20.03 和 gcc-c++-11.2.1-9.fc.35.x86_64,如果有的话这些事情在这里有所作为。我什至卸载了 GTK4 并重新安装它,只是想看看是否能修复它——不。我对一般编程特别是 GUI 非常陌生,我基本上只是想在没有任何特定目标的情况下搞砸“Hello World”程序。我只是想学习。但这种事情让我从尝试学习编程的第一分钟起就一直感到无尽的悲伤,而这次我无法 Google 回答。哦好吧,一切都是第一次。
一段时间以来,我主要在各种 GTK3 和 GTK4 项目中使用代码块。我还对 IDE 进行了一些调整,因为它与构建 GTK3 或 GTK4 项目有关,因此为了记住带有代码块的“vanilla”GTK 项目是什么样的,我安装了 IDE在虚拟 Linux Mint 机器上启动了一个新项目。与您一样,选择“GTK”作为我的项目类型,IDE 在“main.c”文件中生成了样板“Hello World”程序。但是,我立即注意到在我的机器上生成的代码与您上面的示例之间存在一个差异。 “包含”文件集有所不同。您的集合包含以下内容:
#include <stdlib.h>
#include <gdk/gdk.h>
static void helloWorld (GtkWidget *wid, GtkWidget *win)
在我的机器上前三行代码如下:
#include <stdlib.h>
#include <gtk/gtk.h>
static void helloWorld (GtkWidget *wid, GtkWidget *win)
如果确实,您的代码块版本引用了 GDK 库(其中包含对象的信息,例如 cairo 信息,而不是小部件信息),您可能需要修改对“include”文件的引用
`pkg-config gtk+-2.0 --cflags`
并且,在链接器选项下,您可能会找到如下所示的库设置:
`pkg-config gtk+-2.0 --libs`
因此,如果您的系统上没有 GTK2 库,您的代码可能无法编译。 Linux Mint 默认安装了 GTK2 库。我不知道 Fedora 是否这样做。
因此,对于您最初的“Hello World”项目和后续项目,您可能只需修改对
我希望解释能为您澄清一些事情。
此致。