你应该知道两件事
好的解决问题。我正在使用Clion来编写我的C项目,一切都很公平但突然我想用C制作GUI应用程序所以我谷歌并发现GTK是最好的选择。去他们的网站下载了所有安装的所需文件,他们还安装了依赖文件,一切顺利。奇怪的是,gtk头文件没有直接包含在/ usr / include中,而是有一个文件&#34; gtk-3.o&#34;其中包含gtk和gdk头文件。所以诅咒我的noobness我总是试图包括&gt; -k-3.o&#39;而不是这样做#include <gtk-3.0/gtk/gtk.h>
,每当我这样做,我得到错误。然后我做了一个人们想到的最愚蠢的事情,我复制了gtk-3.0文件夹中的所有文件并将它们直接粘贴到/ usr / include中。现在,当我包括所需的文件,如包括gtk.h和之后包括gdk.h和之后的另一个文件(忘记名称)我得到一个错误,说只有gtk.h可以直接包含。我搜索了这个错误并发现一个人说GTK的人不希望gtk文件直接包含在/ usr / include中,因为他们的某些头文件存在未满足的依赖关系。一个人在下面评论说,他包括gtk文件,如通过子目录和工作正常,但现在我不能这样做,因为我已经复制了/ usr / include中的gtk-3.0的内容。我已经完全删除了Clion并且正在考虑删除/ usr / include的内容,并且可能重新安装Clion将获得头文件。如果不会发生这种情况,请指导我如何获取头文件或更好的替代方案,如果有的话。帮助将受到高度赞赏,因为我花了一整天时间试图解决这个问题,我很累,想要一些专家的帮助。感谢
注意:我尚未删除/ usr / include /
答案 0 :(得分:1)
你应该从不手动弄乱/usr
中的文件,除非你绝对确定你在做什么。
一旦你搞砸了你的/usr
,取决于它有多糟糕,你可以通过重新安装受影响的软件包来修复它,但你也可能最终完全重新安装操作系统。
一旦你有了一个有效的操作系统,这就是你应该如何开始的 不幸的是,我从未使用过Kali Linux,但我会尝试以适用于大多数发行版的方式来解释答案。
您将需要一个编译器。如果你想使用C,我建议 gcc 或 clang 。您还需要 make 以及其他构建工具,如cmake,qmake,meson等。
大多数发行版都有一个 build-essential 元数据包,您可以安装。
我还强烈建议安装pkg-config
。
从发行版的程序包管理器中安装要使用的库及其开发包。在基于Debian的系统上,开发包后缀为-dev
,在基于Fedora的系统上,后缀为-devel
。所以如果你想使用mylibrary
,你需要:< / p>
# On Debian-based systems
apt-get install mylibrary mylibrary-dev
# On Fedora-based systems
dnf install mylibrary mylibrary-devel
注意:
pacman
,zypper
,pkcon
等You can check this wikipage to see how they correlate. 您编写了一些代码,包含库的标题并调用一些函数。然后,当您尝试编译代码时,编译器会告诉您它无法找到这些包含,并且无法找到您要使用的函数的定义。
告诉编译器您要使用该库。
您可以通过使用-I
设置包含路径并使用-l
将库添加到链接器来执行此操作。如果您不确定应该将哪些内容传递给编译器,pkg-config
可以解决问题:
以下命令将告诉您需要告诉编译器:
pkg-config --cflags mylibrary
pkg-config --libs mylibrary
所以编译命令如下所示:
gcc -I/usr/include/mylibrary -lmylibrary yourcode.c
注意:
pkg-config
而言,该库的名称并不总是与您使用apt-get
或dnf
安装的软件包的名称相匹配。您可以通过查看/usr/lib/pkgconfig
或类似位置找到该名称。 (在基于Fedora的64位系统上,/usr/lib64/pkgconfig
,在其他发行版上,它可能在其他地方。)虽然理解上述过程是非常值得的,但是手动编写所有这些命令很快就会变得非常繁琐(特别是对于大型项目),所以你可以使用像cmake,qmake,meson这样的构建工具。等等,它将为您生成这些命令。
这些工具已经超出了这个已久的答案的范围,但随时可以在网上搜索它们,你一定会找到一个教程。
在上述解释之后,让我们看看所有这些在实践中是如何运作的。我将向您展示如何编译一个非常简单的GTK应用程序。
我使用Fedora,但其他任何GNU / Linux发行版的步骤都相似。
首先,安装GTK及其开发包
# Fedora
dnf install gtk3-devel
# Debian
apt-get install libgtk-3-dev
我使用Google搜索某些GTK示例代码并找到了their getting started page。因此,请使用以下示例代码并将其保存在example.c
:
#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;
}
然后找出pkgconfig名称:
# Note: the location might be different on your system, see above
ls /usr/lib64/pkgconfig | grep gtk
因此pkgconfig名称为gtk+-3.0
现在找出正确的编译器标志:
pkg-config --libs --cflags gtk+-3.0
其中输出以下内容:
-I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libdrm -I/usr/include/harfbuzz -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include -pthread -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
您的计算机上的结果会有所不同。使用您在计算机上获得的此命令的结果!所以不要复制粘贴此命令,因为它不适合您。使用pkgconfig命令的结果编译示例代码:
gcc example.c -o example -I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libdrm -I/usr/include/harfbuzz -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include -pthread -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
或者简单地说:
gcc example.c -o example `pkg-config --cflags --libs gtk+-3.0`
正确编译程序。
让我们运行它:
./example
Aaaand万岁!它显示一个空的GTK窗口,正如我们所期望的那样 如果您想了解更多信息,请参阅Getting Started with GTK+和Compiling GTK+ Applications。