Gotk3与Golang 1.11.4的使用指南
Gotk3与Golang 1.11.4的使用指南 我在Windows 7 x64系统上工作。在我的某个项目中需要GUI界面,因此安装了gotk3(Go语言的gtk3绑定)。 以下是详细的安装说明:https://github.com/gotk3/gotk3/wiki/Installing-on-Windows
一切运行正常。我的朋友请我帮忙安装gotk3,因为他在安装后遇到了错误。 当我们重新安装所有组件(安装了最新的go1.11.4和msys64)后得到相同结果时,我感到很惊讶。 由于没有找到解决方案,我决定在家里的电脑上尝试重新安装所有组件。通过逐步测试,我发现该库在go1.11.2版本下可以正常工作,但在go1.11.4版本下无法使用。
go get github.com/gotk3/gotk3/gtk
# github.com/gotk3/gotk3/pango
C:\Users\Admin\AppData\Local\Temp\go-build381062570\b035\_x002.o: In function
`_cgo_d7fe93989068_Cfunc_g_value_get_enum':
/tmp/go-build/cgo-gcc-prolog:56: undefined reference to `g_value_get_enum'
C:\Users\Admin\AppData\Local\Temp\go-build381062570\b035\_x004.o: In function
`_cgo_d7fe93989068_Cfunc_g_value_get_boxed':
/tmp/go-build/cgo-gcc-prolog:62: undefined reference to `g_value_get_boxed'
collect2.exe: error: ld returned 1 exit status
我无法理解这是我操作失误还是软件本身的错误?
更多关于Gotk3与Golang 1.11.4的使用指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html
已解决!
帮助将 pango-layout.go 和 pango-attributes.go 文件中的 #cgo pkg-config: pango 替换为 #cgo pkg-config: pango gobject-2.0。
#cgo pkg-config: pango gobject-2.0
更多关于Gotk3与Golang 1.11.4的使用指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这是一个在Go 1.11.4版本下使用gotk3时遇到的已知链接问题。错误信息显示在链接阶段无法找到GTK相关的C函数符号,这通常是由于CGO编译标志或库链接顺序问题导致的。
问题根源在于Go 1.11.4对CGO的处理有所变化,导致GTK库的链接顺序不正确。以下是解决方案:
// 在编译时需要添加特定的pkg-config标志
// 创建一个build脚本或者使用以下编译命令:
package main
/*
#cgo pkg-config: gtk+-3.0
#include <gtk/gtk.h>
*/
import "C"
import (
"github.com/gotk3/gotk3/gtk"
)
func main() {
gtk.Init(nil)
win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
win.SetTitle("Gotk3 Example")
win.Connect("destroy", func() {
gtk.MainQuit()
})
win.ShowAll()
gtk.Main()
}
编译时需要使用正确的环境变量:
# 设置正确的pkg-config路径
export PKG_CONFIG_PATH=/mingw64/lib/pkgconfig
# 编译时强制使用cgo并指定链接器标志
CGO_ENABLED=1 go build -x -ldflags="-linkmode=external" main.go
或者创建一个makefile:
all:
set PKG_CONFIG_PATH=C:\msys64\mingw64\lib\pkgconfig
set CGO_ENABLED=1
go build -ldflags="-linkmode=external -extldflags=-Wl,--allow-multiple-definition" main.go
对于Windows系统,还需要确保MSYS2环境正确配置:
# 在MSYS2中安装必要的依赖
pacman -S mingw-w64-x86_64-gtk3
pacman -S mingw-w64-x86_64-pkg-config
pacman -S mingw-w64-x86_64-gcc
如果问题仍然存在,可以尝试降级到Go 1.11.2版本,或者使用以下临时解决方案:
// 在代码开头添加强制链接标志
// #cgo LDFLAGS: -Wl,--allow-multiple-definition -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
这个问题已经在gotk3的GitHub仓库中有相关讨论,主要是由于Go 1.11.4中CGO链接器行为的改变导致的。建议关注gotk3项目的更新,以获得官方的修复方案。

