使用make“严重错误:gtk / gtk.h:没有这样的文件或目录”


18

我正在尝试使用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);
}

您甚至检查文件是否如状态所示?/gtk/gtk.h
低聚木糖

@Xylo不知道如何检查。请告诉我如何检查
osama 2013年

检查目录是否/usr/include/gtk-2.0存在
Xylo 2013年

1
@Baraiam我已经添加main.c中的内容
乌萨马

Answers:


23

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

sudo apt-get install libgtk2.0-dev

libgtk-3-dev

那应该做。


我已经编译使用几个码的#include <GTK / gtk.h>库
乌萨马

问题是当我尝试使用命令make时
osama 2013年

您可以添加相关代码然后查看是否可以复制吗?
Braiam 2013年

我compilies完全当我使用这个命令的gcc -o的main.c你好编译gtk-config --cflags --libs gtk+-2.0
乌萨马

去这个链接,你会明白我要做的askubuntu.com/questions/397246/...
乌萨马

9
sudo apt-get install build-essential gnome-devel

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

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

它使您可以pkg-config节省大量时间


至少在我的情况下,我不必执行sudo apt-get install build-essential gnome-devel,第二条命令乍一看似乎起作用,但也导致了glib“没有这样的文件或目录”问题。解决方案更像是:g++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
Rui Pimentel

3

gtk3等效的debian / ubuntu软件包是 libgtk-3-dev


完全适用于debian buster。安装后,该库中的bellow命令可以将简单的源代码编译为./helloworld可执行文件。gcc `pkg-config --cflags gtk+-3.0` -o helloworld helloworld.c `pkg-config --libs gtk+-3.0`
EsmaeelE

2

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

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

AC_INIT([amhello], [1.0], [bug-automake@gnu.org])
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可以GTK使用在PKG_CHECK_MODULES上面的宏中使用的标识符来检索CFLAGS和LIBS

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

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


你是个天才。我只是在等待您的答案,因为我知道您可以给出适当的答案。谢谢:)
osama 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.