网站首页 > 博客文章 正文
前言
目前找到几个实现起来相对简单的跨平台方案,但是各有优缺点
1.qt,优点:文档丰富能完美的跨平台,相对执行效率高。
缺点:杂七杂八的东西太多,导致开发平台环境太大,生成的可执行文件过大,不能自由使用,静态链接收费。
2.java 优点:文档,开源产品多,能完全跨平台,并且生态非常好,完全免费。
缺点:依赖jvm。虽然jdk14后支持打包成本地应用程序双击运行,但是会把整个jvm打包进去,导致程序过大。
3.gtk 优点:支持各种主流编程语言。相对执行效率高。
缺点:文档少,生态相比之下不够完整。
综合考虑后发现go+gtk在当下环境简直是绝配。
gtk写跨平台UI,go写跨平台业务。两者都是既能跨平台,还能有想当高的执行效率。
GO语言本身是跨平台的,但是GO没有GUI框架,因此想要跨平台需要借助GTK跨平台的窗体。对此GOTK就是go使用GTK的方式。
GOTK的github地址
:https://github.com/gotk3/gotk3
首先搭建GOTK的开发环境,
基于window平台搭建开发环境
第一步:下载安装msys2
官方网址:http://www.msys2.org/
下载安装完毕后,修改下配置文件,适应国内下载环境
我安装的是64位的,安装目录是D:\msys64
以下操作都是在D:\msys64下的目录进行的。
所以在msys64下的/etc/pacman.d/目录下会看到三个文件
分别在mirrorlist.mingw32文件中添加
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686
添加完成后的样子应该如下
##
## 32-bit Mingw-w64 repository mirrorlist
##
## Primary
## msys2.org
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686
Server = https://sourceforge.net/projects/msys2/files/REPOS/MINGW/i686/
Server = https://www2.futureware.at/~nickoe/msys2-mirror/mingw/i686/
Server = https://mirror.yandex.ru/mirrors/msys2/mingw/i686/
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/
Server = http://mirror.bit.edu.cn/msys2/mingw/i686/
Server = https://mirror.selfnet.de/msys2/mingw/i686/
Server = https://mirrors.sjtug.sjtu.edu.cn/msys2/mingw/i686/
Server = https://msys2.nyc3.digitaloceanspaces.com/mingw/i686/
Server = https://mirror.jmu.edu/pub/msys2/mingw/i686/
Server = https://ftp.cc.uoc.gr/mirrors/msys2/mingw/i686/
Server = https://ftp.acc.umu.se/mirror/msys2.org/mingw/i686/
Server = https://mirrors.piconets.webwerks.in/msys2-mirror/mingw/i686/
Server = https://quantum-mirror.hu/mirrors/pub/msys2/mingw/i686/
Server = https://mirrors.dotsrc.org/msys2/mingw/i686/
Server = https://mirror.ufro.cl/msys2/mingw/i686/
Server = https://mirror.clarkson.edu/msys2/mingw/i686/
Server = https://ftp.nluug.nl/pub/os/windows/msys2/builds/mingw/i686/
Server = https://download.nus.edu.sg/mirror/msys2/mingw/i686/
Server = https://ftp.osuosl.org/pub/msys2/mingw/i686/
然后在
/etc/pacman.d/mirrorlist.mingw64中开头添加
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64
在
/etc/pacman.d/mirrorlist.msys ,在开头添加
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch
然后如下命令更新完,准备工作就完成了
pacman -Sy
第二步:安装必要是软件使用下面的命令,遇到的所有安装选项都选全部安装
安装GCC,
pacman --noconfirm -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gtk3
安装pkg-config
pacman --noconfirm -S mingw64/mingw-w64-x86_64-pkg-config
安装gtk3,
pacman -S mingw-w64-x86_64-gtk3
安装gtk2
pacman -S mingw-w64-x86_64-gtk2
安装mingw
pacman -S mingw-w64-x86_64-toolchain base-devel
安装mingw可能会因为环境的因素导致失败,如果失败请确认gcc等环境是否安装成功,如果还是失败可以查找相关资料安装mingw。一般安装了gcc就不会失败。
安装gtk工具可选
安装glade
pacman -S mingw-w64-x86_64-glade
安装帮助文档
pacman -S mingw-w64-x86_64-devhelp
然后配置环境变量,把以下两个目录加入到环境变量中
D:\msys64\usr\bin;
D:\msys64\mingw64\bin;
到此处环境安装完成已经!
检测环境是否安装成功
pkg-config --cflags gtk+-2.0
make -v
第三步:运行demo
执行go命令
go get github.com/gotk3/gotk3/gtk
第一次执行这条命令耗时比较长,需要略微等待
如果失败可能提示invalid flag in pkg-config --libs: -Wl,-luuid类似错误
invalid flag in pkg-config --libs: -Wl,-luuid
执行以下命令设置正确目录即可
bash -c "sed -i -e 's/-Wl,-luuid/-luuid/g' D:/msys64/mingw64/lib/pkgconfig/gdk-3.0.pc"
在goland中新建项目结构如下:
初始化模块
go mod init gotk
复制demo代码运行
package main
import (
"github.com/gotk3/gotk3/gtk"
"log"
)
func main() {
// Initialize GTK without parsing any command line arguments.
gtk.Init(nil)
// Create a new toplevel window, set its title, and connect it to the
// "destroy" signal to exit the GTK main loop when it is destroyed.
win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
if err != nil {
log.Fatal("Unable to create window:", err)
}
win.SetTitle("Simple Example")
win.Connect("destroy", func() {
gtk.MainQuit()
})
// Create a new label widget to show in the window.
l, err := gtk.LabelNew("Hello, gotk3!")
if err != nil {
log.Fatal("Unable to create label:", err)
}
// Add the label to the window.
win.Add(l)
// Set the default window size.
win.SetDefaultSize(800, 600)
// Recursively show all widgets contained in this window.
win.ShowAll()
// Begin executing the GTK main loop. This blocks until
// gtk.MainQuit() is run.
gtk.Main()
}
最终运行效果如下
第四步:打包成可移植的程序
开发完成后,生成的exe并不能在没有gtk的环境运行,所以需要将gtk相关的环境一起打包。
我的代码在C:/go/src/gotk/下所以第一行设置的路径是C:/go/src/gotk/
release=C:/go/src/gotk/
#新建执行路径
mkdir $release/bin
#复制dll文件
cp /mingw64/bin/*.dll $release/bin/
#创建目录
mkdir -p $release/share/glib-2.0/schemas
mkdir $release/share/icons
mkdir -p $release/lib/gdk-pixbuf-2.0/2.10.0/loaders
#复制文件
cp /mingw64/share/glib-2.0/schemas/* $release/share/glib-2.0/schemas
cp -r /mingw64/share/icons/* $release/share/icons
cp /mingw64/lib/gdk-pixbuf-2.0/2.10.0/loaders/*.dll $release/lib/gdk-pixbuf-2.0/2.10.0/loaders
cp /mingw64/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache $release/lib/gdk-pixbuf-2.0/2.10.0
打包完未压缩的目录是100多MB明显不是我们想要的大小,所以我我们要对这些进行精简。
首先精简生成的可执行程序
打包成exe的时候最精简方式打包
go build -ldflags="-H windowsgui -s -w"
然后精简不需要的gtk环境文件
我在window下是这么精简的,
将全部文件复制到一台没有任何开发环境的window电脑。
然后双击运行,等程序完全运行起来,右键整个文件夹点击删除,此时弹出XXX正在被占用,不能删除,选跳过。最终留下的就是必须要的dll文件。
以demo为例。最终只剩下26MB不到的文件。
这个时候可执行的最小环境就已经定了。
最后一步进行文件压缩:
我使用360压缩,压缩成.7z文件后,整个压缩文件也只剩下8MB不到的大小。
一个8MB文件的窗体程序,已经基本达到我的目标了。
猜你喜欢
- 2025-05-09 介绍一款国产开源免费的在线文件文档预览的kkFileView
- 2025-05-09 Tomcat介绍和配置使用(tomcat的常用配置)
- 2025-05-09 厉害!简短精致:IDEA SpringBoot 免重启热部署(热加载)
- 2025-05-09 Spring路径-10-SpringBoot开发部署与测试
- 2025-05-09 java批量将word文档转换为pdf(java将word转化为pdf)
- 2025-05-09 音乐盒Java在线音乐jsp源代码Mysql
- 2025-05-09 Optimizer For Eclipse,性能大有不同!
- 2025-05-09 Spring-ai-alibaba以及阿里云百炼的简单使用
- 2025-05-09 信创终端 PDF 处理神器:免费使用 hhdesk 轻松合并与拆分 PDF!
- 2025-05-09 Mcinabox安装包和运行库分享(蓝奏云网盘)
你 发表评论:
欢迎- 07-07Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- 07-07Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- 07-07Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- 07-07Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- 07-07IT运维必会的30个工具(it运维工具软件)
- 07-07开源项目有你需要的吗?(开源项目什么意思)
- 07-07自动化测试早就跑起来了,为什么测试管理还像在走路?
- 07-07Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- 最近发表
-
- Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- IT运维必会的30个工具(it运维工具软件)
- 开源项目有你需要的吗?(开源项目什么意思)
- 自动化测试早就跑起来了,为什么测试管理还像在走路?
- Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- Cursor 太贵?这套「Cline+OpenRouter+Deepseek+Trae」组合拳更香
- 为什么没人真的用好RAG,坑都在哪里? 谈谈RAG技术架构的演进方向
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)