使用 make 时出现“致命错误:gtk/gtk.h:没有这样的文件或目录”

使用 make 时出现“致命错误:gtk/gtk.h:没有这样的文件或目录”

我正在尝试使用 make 命令进行构建。我正在关注我正在使用 GTK+2 和 C 语言编译代码

hp@ubuntu:~/amhello$ make
make  all-recursive
make[1]: Entering directory `/home/hp/amhello'
Making all in src
make[2]: Entering directory `/home/hp/amhello/src'
gcc -DHAVE_CONFIG_H -I. -I..     -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o         main.o main.c
main.c:3:20: fatal error: gtk/gtk.h: No such file or directory
compilation terminated.
make[2]: *** [main.o] Error 1
make[2]: Leaving directory `/home/hp/amhello/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/hp/amhello'
make: *** [all] Error 2

这是 main.c 代码

#include<config.h>
#include<stdio.h>
#include<gtk/gtk.h>
void static call(GtkWidget *widget,gpointer data) {
    g_print("%s \n",(gchar*) data);
}
int main(int agrc, char *agrv[]) {
    gtk_init(&agrc,&agrv);
    GtkWidget *window,*button;
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(window,"delete-event",G_CALLBACK(gtk_main_quit),NULL);
    gtk_window_set_title(GTK_WINDOW(window),"one button");
    button=gtk_button_new_with_label("hello world");
    g_signal_connect(button,"clicked",G_CALLBACK(call),(gpointer) "hello world");
    gtk_container_set_border_width(GTK_CONTAINER(window),10);
    gtk_container_add(GTK_CONTAINER(window),button);
    gtk_widget_show_all(window);
    gtk_main();
    return (0);
}

答案1

这意味着您没有 gtk 标头来使用 GTK+ 构建内容。错误没有出现在 ./configure 步骤中,这真是太奇怪了。要解决这个问题,只需执行以下操作:

sudo apt-get install libgtk2.0-dev

或者libgtk-3-dev

那就可以了。

答案2

sudo apt-get install build-essential gnome-devel

这也是必要的,以便你可以做一些很酷的事情,例如:

g++ main.cpp -o base `pkg-config --cflags --libs gtk+-3.0`

它能让你pkg-config节省大量时间

答案3

Gtk3 等效的 debian/ubuntu 包是libgtk-3-dev

答案4

由于您使用 autotools 来生成 Makefile,因此您需要告诉 automake 如何找到项目的标头和库依赖项并将它们合并到最终的 Makefile 中。这不是我的专业领域,但我会尽力为您指明正确的方向。以下大部分内容基于以下教程:通过 Automake 和 Autoconf 使用 C/C++ 库

首先,您必须修改顶层 configure.ac 文件以添加 Gtk-2.0 依赖项。您可以使用宏PKG_CHECK_MODULES来运行pkg-config以查找相应的包含和库指令 - 最好先检查是否存在,因此我们也pkg-config应该添加一个测试。PKG_PROG_PKG_CONFIG加粗部分表示相对于您开始的原始 amhello 教程中的文件所添加的内容。

AC_INIT([amhello], [1.0], [[email protected]])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
 Makefile
 src/Makefile
])
dnl Test for pkg-config
PKG_PROG_PKG_CONFIG([0.22])
dnl Test for gtk+
PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.24.10])
AC_OUTPUT

然后,您可以使用上面宏中使用的标识符src/Makefile.am检索 CFLAGS 和 LIBSGTKPKG_CHECK_MODULES

bin_PROGRAMS = hello
hello_SOURCES = main.c
AM_CPPFLAGS = ${GTK_CFLAGS}
hello_LDADD = ${GTK_LIBS}

当您重新运行时,它应该使用适当的包含路径、库路径和库make重新生成您的 src/Makefile 。-I-L

相关内容