我知道这个问题已经被回答过好几次了,我试过每一个,但仍然找不到确切的解决方案。我开始学习带有 Glade 用户界面的 GTK + 3.0。我知道 Glade 将为设计生成 XML,并且相同的 XML 可以在我们的 c/cpp 程序中使用。但要执行该程序,必须安装所有库或必须在 IDE 中将路径设置为库。我使用 Anjuta IDE 来开发这个程序,每当我尝试构建程序时都会收到以下错误。
gtk/gtk.h: No such file or directory
程序代码
#include <gtk/gtk.h>!
#include <glade/glade.h>
void
ok_button_clicked (GtkWidget *widget, gpointer user_data)
{
printf ("Thanks for trying out my program.\n");
gtk_main_quit ();
}
int main (int argc, char *argv[])
{
GladeXML *main_window;
GtkWidget *widget;
gtk_init (&argc, &argv);
/* load the interface */
main_window = glade_xml_new ("example-1.glade", NULL, NULL);
/* connect the signals in the interface */
/* Have the ok button call the ok_button_clicked callback */
widget = glade_xml_get_widget (main_window, "OKButton");
g_signal_connect (G_OBJECT (widget), "clicked",
G_CALLBACK (ok_button_clicked),
NULL);
/* Have the delete event (window close) end the program */
widget = glade_xml_get_widget (main_window, "MainWindow");
g_signal_connect (G_OBJECT (widget), "delete_event",
G_CALLBACK (gtk_main_quit), NULL);
/* start the event loop */
gtk_main ();
return 0;
}
每当我尝试添加 Lib 或外部 Lib 时,我都无法添加gtk/gtk.h
文件,相同的文件已经存在/usr/include/gtk-3.0/gtk/gtk.h
,当我尝试在libanjuta
相同的代码中复制相同的文件时仍然会出现相同的错误,任何帮助都会受到高度赞赏的朋友,我正在努力执行程序..
谢谢 Amul Bhatia
答案1
如果你只是想编译并运行它而不是制作 makefile
将此文件保存在foobar.c 归档为例子-1.glade
https://github.com/interval1066/XFC/blob/master/examples/glade/example-1/example-1.glade
打开终端并切换到包含foobar.c和例子-1.glade 并发出此行
gcc -o foobar foobar.c `pkg-config --cflags --libs libglade-2.0`
并运行二进制文件
./foobar
或者如果你坚持使用 makefile 进行编译,请用这个替换你的 makefile
## Created by Anjuta
CC = gcc
CFLAGS = -g -Wall
OBJECTS = foobar.o
INCFLAGS =
LDFLAGS = -Wl,-rpath,/usr/local/lib
LIBS =$(shell pkg-config gtk+-2.0 libglade-2.0 --libs)
GTKFLAGS=-export-dynamic `pkg-config --cflags --libs libglade-2.0 `
all: foobar
foobar: $(OBJECTS)
$(CC) -o foobar $(OBJECTS) $(LDFLAGS) $(LIBS)
.SUFFIXES:
.SUFFIXES: .c .cc .C .cpp .o
.c.o :
$(CC) -o $@ -c $(CFLAGS) $< $(INCFLAGS) $(GTKFLAGS)
count:
wc *.c *.cc *.C *.cpp *.h *.hpp
clean:
rm -f *.o
.PHONY: all
.PHONY: count
.PHONY: clean
我在我的系统中测试了上述说明,它有效。