我正在尝试使用 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 和 LIBSGTK
PKG_CHECK_MODULES
bin_PROGRAMS = hello
hello_SOURCES = main.c
AM_CPPFLAGS = ${GTK_CFLAGS}
hello_LDADD = ${GTK_LIBS}
当您重新运行时,它应该使用适当的包含路径、库路径和库make
重新生成您的 src/Makefile 。-I
-L