在 Go with gco 中通过 gtk 使用 glib 的问题

我对C的理解很差。我可以阅读代码,但我不知道如何包含/构建/制作/配置任何东西。这可能是我无法编译以下 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>

但它没有解决任何问题。


有谁知道我做错了什么?


暮色呼如
浏览 263回答 1
1回答

慕尼黑5688855

您尝试调用的函数实际上可能是宏,它们不由 cgo 处理,因此未定义。看看go-gtk,它为 Go 提供到 GTK 的正确绑定。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go