使用glib通过gtk在Go中使用gco

时间:2013-06-14 09:48:53

标签: go cgo

我对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>

但它没有解决任何问题。

有人知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

您尝试调用的函数实际上可能是宏,它们不是由cgo处理的,因此未定义。看看go-gtk,它提供了与GTK for Go的正确绑定。