Windows环境下搭建go-gtk的方法以及过程中一些问题的解决办法

文章推薦指數: 80 %
投票人數:10人

最近打算做一个桌面应用程序,然后也打算学一波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}



請為這篇文章評分?