Windows环境下搭建go-gtk的方法以及过程中一些问题的解决办法
文章推薦指數: 80 %
最近打算做一个桌面应用程序,然后也打算学一波go语言,所以就借此机会用go写一个带界面的程序。
我是用了go-gtk,这里记录一下环境搭建的过程, ...
ultronxr
[email protected]
主页MainPage
标签Tags
分类Categories
归档Archives
仓库Github
关于About
TOC
1.安装go和设置workspace1.1.安装go1.2.设置工作文件夹workspace2.安装Windows版GTK2.1.安装MSYS22.2.修改MSYS2的源2.3.安装gtk和相关工具2.4.添加msys64环境变量3.尝试官方go-gtk的DEMO3.1.编译3.2.运行4.相关链接
Windows环境下搭建go-gtk的方法以及过程中一些问题的解决办法
2019-04-02
go
最近打算做一个桌面应用程序,然后也打算学一波go语言,所以就借此机会用go写一个带界面的程序。
我是用了go-gtk,这里记录一下环境搭建的过程,以及搭建时候踩的四个坑(有坑的地方我着重标出来了)。
安装go和设置workspace安装go如果已经装了go环境的可以直接跳过这一步。
去官网下载页面下载windows版本对应的安装包,或者直接点这里下载1.12.1版本(写这个博客的时候的版本)。
下载完之后就是傻瓜式安装了,打开安装包,接受用户协议、选定安装路径,然后一直点下一步就行了。
安装过程会请求管理员权限(用来写入环境变量),同意就行了。
装好之后,打开cmd,输入goversion,如果显示如下,说明安装成功:
设置工作文件夹workspace如果已经设置了workspace的可以直接跳过这一步。
先在某个路径新建一个文件夹,例如我的是D:\go_workspace(下面都以这个目录为例),作为工作目录。
然后在这个路径下新建三个文件夹,分别命名为bin,pkg,src,作用这里不再赘述。
把D:\go_workspace目录加入到系统环境变量里去,方法就是在系统变量里面新建一条记录,名称为GOPATH,值为D:\go_workspace。
如果用户变量里面已经存在GOPATH的变量了,那么把这个变量的值也修改为D:\go_workspace。
打开cmd,输入goenv,如果显示如下,说明配置成功:
GOPATH就是你的工作目录,GOROOT就是go的安装目录。
安装Windows版GTK先贴两个官网,一个是go-gtk在github上的官方项目:链接然后是Windows版GTK的官网:链接
安装方法在两个网站上都有写,愿意的话可以直接去官网看官方教程。
官方给WIndows版本的GTK提供了两种安装方法,这里选择其一:使用MSYS2安装。
安装MSYS2官网
进去就是三个按钮,第一个是32位安装包,第二个是64位安装包,第三个是github链接。
这里选择第二个,下载好后也是傻瓜安装,选定安装目录(我安装的目录是C:\msys64),一直点下一步就行了。
装好之后开始菜单的MSYS2文件夹里有三个快捷方式:
选择名称里不带32-bit或者64-bit后缀的那个快捷方式打开,就是MSYS2的命令行界面(后面用的都是这个):
修改MSYS2的源因为后面要下载的内容都挺大的,如果不换源可能需要下载很久很久。
。
。
这里换的是清华的源,方法如下。
打开MSYS2的安装目录(我安装的目录是C:\msys64),进入C:\msys64\etc\pacman.d路径,
编辑mirrorlist.mingw32文件,在开头添加:
1Server=https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
编辑mirrorlist.mingw64文件,在开头添加:
1Server=https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
编辑mirrorlist.msys文件,在开头添加:
1Server=https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
修改完成后保存,打开MSYS2命令行,输入pacman-Sy,刷新软件包数据即可。
安装gtk和相关工具安装gtk3:
MSYS2命令行输入pacman-Smingw-w64-x86_64-gtk3回车,提示是否进行安装,输入y回车。
安装gtk2:
MSYS2命令行输入pacman-Smingw-w64-x86_64-gtk2回车,提示是否进行安装,输入y回车。
安装Glade:
MSYS2命令行输入pacman-Smingw-w64-x86_64-glade回车,提示是否进行安装,输入y回车。
安装Devhelp:
MSYS2命令行输入pacman-Smingw-w64-x86_64-devhelp回车,提示是否进行安装,输入y回车。
安装buildtools:
MSYS2命令行输入pacman-Smingw-w64-x86_64-toolchainbase-devel回车,提示选择安装哪个库,直接回车,选择全部安装。
安装完成后清理缓存,使用pacman-Scc命令删除。
添加msys64环境变量打开环境变量,在系统变量栏的PATH变量中新增两个值,分别是C:\msys64\mingw64\bin和C:\msys64\usr\bin。
两个注意点:
①注意如果你的安装目录不同请修改成相对应的路径;
②一定要C:\msys64\mingw64\bin在前,C:\msys64\usr\bin在后,否则会出错!!!!!(((坑一)))
测试是否成功:
打开cmd命令提示符,输入pkg-config--cflagsgtk+-3.0,如果显示如下,说明成功:
继续输入make-v,如果显示如下,说明成功:
尝试官方go-gtk的DEMO编译去github官网下载。
在go工作目录的src文件夹下,新建一个名为github.com的文件夹,然后进入该文件夹,继续新建一个名为mattn的文件夹,然后把下载下来的压缩包解压到mattn文件夹下,并重命名为go-gtk。
最后的目录路径应该是这样的:
D:\go_workspace\src\github.com\mattn\go-gtk
进入go-gtk\_example\demo目录,里面有一个demo.go文件。
打开cmd命令提示符,进入上面所说的demo目录,或者直接在文件夹地址栏里输入cmd即可在当前目录打开命令提示符。
输入gobuilddemo.go进行编译,如果像下面没有任何提示,说明编译成功,如果有任何输出,说明报错了。
报错有几种可能,我遇到过两种:
①报错信息中提示sorry,unimplemented:64-bitmodenotcompiledin之类的语句:(((坑二)))
说明你的mingw版本不对,应该是64位的mingw64,而不是32位的mingw32。
出现这种情况有可能是你以前自己安装过mingw而且不是64位版本的,删除32位版本,清理一下注册表系统键值PATH中有关mingw的值,然后重新安装64位版本的(或者重新运行步骤2.3的安装buildtools的命令)。
②报错信息中提示invalidflaginpkg-config--libs:-Wl,-luuid之类的语句:(((坑三)))
这是一个大坑,官方的issue里就有很多人讨论这个,这是go语言更新之后的bug,它把-Wl命令参数当成非法参数并禁止执行,你应该自己把这个参数加入whitelist白名单。
修改方法如下:
进入C:\msys64\mingw64\lib\pkgconfig路径,编辑里面的gdk-2.0.pc文件和gdk-win32-2.0.pc文件。
两个文件的修改方法相同,把原本在Libs:一行中的-Wl,删除,增加一行LDFLAGS:-Wl。
修改后的内容如下:
12345678910111213prefix=/mingw64exec_prefix=${prefix}libdir=${exec_prefix}/libincludedir=${prefix}/includetarget=win32Name:GDKDescription:GTK+DrawingKit(${target}target)Version:2.24.32Requires:pangowin32pangocairogio-2.0gdk-pixbuf-2.0cairo-win32Libs:-L${libdir}-lgdk-${target}-2.0-lgdi32-limm32-lshell32-lole32-luuidCflags:-I${includedir}/gtk-2.0-I${libdir}/gtk-2.0/includeLDFLAGS:-Wl
然后继续修改同一个目录下的三个文件:gdk-3.0.pc、gdk-win32-3.0.pc和gdk-broadway-3.0.pc,修改方法相同,也是把原本在Libs:一行中的-Wl,删除,增加一行LDFLAGS:-Wl,修改后的内容如下:
1234567891011121314prefix=/mingw64exec_prefix=${prefix}libdir=${exec_prefix}/libincludedir=${prefix}/includetargets=win32broadwayName:GDKDescription:GTK+DrawingKitVersion:3.24.5Requires:pangowin32pangocairogdk-pixbuf-2.0>=2.30.0cairo>=1.14.0cairo-gobject>=1.14.0Requires.private:gio-2.0>=2.53.4cairo-win32cairoepoxy>=1.4fribidi>=0.19.7Libs:-L${libdir}-lgdk-3-lgdi32-limm32-lshell32-lole32-luuid-lwinmm-ldwmapi-lsetupapi-lcfgmgr32-lzCflags:-I${includedir}/gtk-3.0LDFLAGS:-Wl
保存退出即可。
运行编译成功后会在demo.go同目录下生成一个demo.exe,双击运行即可。
运行时可能会出现一个问题,这个问题也是有很多人遇到:(((坑四)))
官方issue链接。
双击exe运行时,弹出对话框提示无法定位程序输入点deflateSetHeader于动态链接库xxx.dll,后面那个xxx.dll有可能不同,但是大部分是zlib1.dll。
出现这种问题时,直接把C:\msys64\mingw64\bin路径下的zlib1.dll文件,复制到C:\Windows\System32和C:\Windows\SysWOW64文件夹下即可。
如果提示的不是zlib1.dll文件,而是其他dll文件,你也可以试试这个方法(因为我就是报别的dll错,然后用这种方法解决的)。
运行成功之后的界面:
相关链接
GitHub的go-gtk官网
go语言官网
Windows版GTK的官网
MSYS2官网
Go版GTK:环境搭建(windows)
sorry,unimplemented:64-bitmodenotcompiledin解决办法
go编译go-gtk报错
go-gtk/issues/307
windows版的glade安装包下载地址
最后更新时间:2019-05-0622:04:09
评论基于Valine,不用登录即可评论,支持Markdown。
gogo-gtkgtk
Prev
一个自己写的HTML的TODO清单样例
Next
以当前时间为名新建文件夹并复制文件到其中的bat脚本
扫一扫,分享到微信
{title}
{tags}
{date}
延伸文章資訊
- 1gtk - pkg.dev
Go Bindings for Gtk+ 2. Support version 2.16 and later. Index ¶. Constants; func ABOUT_DIALOG(p *...
- 2go-gtk 研究,在linux 下面使用golang 做gui 开发。 - CSDN博客
目录1,关于go-gtk2,安装3,总结1,关于go-gtkgo-gtk 一个gtk2封装的golang ,需要libgtk±2.0 库,直接安装就行。https://github.com/ma...
- 3Golang gtk.Window函數代碼示例- 純淨天空
本文整理匯總了Golang中github.com/mattn/go-gtk/gtk.Window函數的典型用法代碼示例。如果您正苦於以下問題:Golang Window函數的具體用法?Golan...
- 4mattn/go-gtk: Go binding for GTK - GitHub
Go binding for GTK. Contribute to mattn/go-gtk development by creating an account on GitHub.
- 5Golang gtk.GtkWidget類代碼示例- 純淨天空
本文整理匯總了Golang中github.com/agl/go-gtk/gtk.GtkWidget類的典型用法代碼示例。如果您正苦於以下問題:Golang GtkWidget類的具體用法?Gol...