我对C的理解很差。我可以阅读代码,但我不知道如何包含/ build / make / configure任何东西。这可能是我无法获得以下Go代码进行编译的原因。这段代码是我尝试将https://developer.gnome.org/gtk3/3.0/gtk-getting-started.html改为Go。
package main
// #cgo pkg-config: gtk+-3.0
// #include <gtk/gtk.h>
import "C"
func main() {
C.gtk_init(nil, nil)
window := C.gtk_window_new(C.GTK_WINDOW_TOPLEVEL)
C.g_signal_connect(window, "destroy", C.G_CALLBACK(C.gtk_main_quit), nil)
C.gtk_widget_show(window)
C.gtk_main()
}
违规行为C.g_signal_connect(...)
。错误是:
1: error: 'G_CALLBACK' undeclared (first use in this function)
1: error: 'g_signal_connect' undeclared (first use in this function)
1: note: each undeclared identifier is reported only once for each function it appears in
如果删除该行,则代码可以正常工作,gtk窗口会打开。
我发现这个g_signal_connect
来自glib-object.h
,它包含在gtk
的许多头文件中。我试着自己把它包括在内:
// #cgo pkg-config: gtk+-3.0 glib-2.0
// #include <gtk/gtk.h>
// #include <glib-object.h>
但它没有解决任何问题。
有人知道我做错了吗?