问题
我正试图解决一个问题,当我尝试编译这个示例文件时发生了这个问题:
#include <gtk/gtk.h>
static void print_hello(GtkWidget *widget, gpointer data)
{
g_print ("Hello Worldn");
}
static void activate(GtkApplication *app, gpointer user_data)
{
GtkWidget *window;
GtkWidget *button;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Window");
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
button = gtk_button_new_with_label ("Hello World");
g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
gtk_window_set_child (GTK_WINDOW (window), button);
gtk_window_present (GTK_WINDOW (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;
}
所有的东西都安装好了,当我用gcc.exe编译时,一切都正常,尽管在编译结束时我遇到了下面的问题
运行此命令后出现问题:
gcc.exe -IC:/gtk_32bit/include/gtk-3.0 -IC:/gtk_32bit/include/cairo -IC:/gtk_32bit/include/pango-1.0 -IC:/gtk_32bit/include/atk-1.0 -IC:/gtk_32bit/include/cairo -IC:/gtk_32bit/include/pixman-1 -IC:/gtk_32bit/include -IC:/gtk_32bit/include/freetype2 -IC:/gtk_32bit/include -IC:/gtk_32bit/include/libpng15 -IC:/gtk_32bit/include/gdk-pixbuf-2.0 -IC:/gtk_32bit/include/libpng15 -IC:/gtk_32bit/include/glib-2.0 -IC:/gtk_32bit/lib/glib-2.0/include -v hello-world-gtk.c -LC:/gtk_32bit/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangocairo-1.0 -lpangoft2-1.0 -lfreetype -lfontconfig -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lm -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl -o hello-world-gtk.exe
我从下面的命令创建了上面的命令,当我尝试使用下面的命令时,它不会运行:
gcc.exe "pkg-config.exe --cflags gtk+-3.0" -o hello-world-gtk hello-world-gtk.c "pkg-config.exe --libs gtk+-3.0"
我还注意到上面的网站链接以前有上面的命令,尽管今天我注意到他们把上面的命令改成了下面的命令:
gcc -o hello-world-gtk hello-world-gtk.c "pkg-config --cflags --libs gtk4"
这可能是它不起作用的原因,但我认为以前的命令应该和当前的命令一样起作用,这是现在网站上更新的命令。
错误
hello-world-gtk.c:27:60: error: 'gtk_window_close' undeclared (first use in this function); did you mean 'gtk_window_move'?
27 | g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_close), window);
假设
我正在使用make.exe。我还尝试在不使用make的情况下执行gcc.exe命令。这两种方式都会导致上述问题!~我不知道的是问题出在哪里!如果它与丢失的库或包含在编译过程中未找到的文件有关,无论是否使用make!我想知道的是,它是否与丢失的库文件或包含文件有关。我缺少的是什么文件,这将是一个我需要解决的问题,我不知道如何解决。
编译器错误:
hello-world-gtk.c:27:60: error: 'gtk_window_close' undeclared (first use in this function); did you mean 'gtk_window_move'?
27 | g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_close), window);
告诉你,当你把它传递给函数时,它不知道gtk_window_close
是什么类型的对象(它可能是一个指针,但编译器必须知道它是指向函数的指针,参数的类型和数量以及返回值(
gtk_window_close
函数应该将参数列表与G_CALLBACK
的要求相匹配,而编译器不能这样做,因为合适的头文件不是#include
d。
您可以在include文件<gtk/gtk.h>
中进行挖掘,看看这个函数是在哪里定义的。您可以查阅此页面了解更多信息:GtkWindow
-gtk_window_close