网站首页 > 编程文章 正文
前言
目前找到几个实现起来相对简单的跨平台方案,但是各有优缺点
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文件的窗体程序,已经基本达到我的目标了。
- 上一篇: Matlab错误使用mex未找到支持的编译器或SDK解决办法
- 下一篇: 1.1安装Qt
猜你喜欢
- 2025-05-16 时尚芭莎90秒|有理有据!冬装购买选色指南
- 2025-05-16 VS code使用入门(1)
- 2025-05-16 Git基本使用,分布式版本控制
- 2025-05-16 从某宝奸商淘回来的惠普ELITEBOOK 8570P,全金属好机
- 2025-05-16 Qt中添加OpenCV库
- 2025-05-16 cygwin安装skyeye所需的软件包列表
- 2025-05-16 code::blocks安装及汉化完整教程
- 2025-05-16 人人可以做程序员,CurSor编程神器!
- 2025-05-16 普通人 如何 利用 类似 ChatGPT AI 编写程序
- 2025-05-16 Rufus 4.2稳定版发布,支持ZIP64、VHDX、FFU等镜像格式
你 发表评论:
欢迎- 05-16时尚芭莎90秒|有理有据!冬装购买选色指南
- 05-16VS code使用入门(1)
- 05-16Git基本使用,分布式版本控制
- 05-16从某宝奸商淘回来的惠普ELITEBOOK 8570P,全金属好机
- 05-16Qt中添加OpenCV库
- 05-16cygwin安装skyeye所需的软件包列表
- 05-16code::blocks安装及汉化完整教程
- 05-16人人可以做程序员,CurSor编程神器!
- 最近发表
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)