Rust语言GUI库之gtk安装

工具链安装管理软件vcpkg

vcpkg介绍

在使用C/C++编写项目时, 引用第三方库是很麻烦的事, 需要手动下载源码然后编译最后再添加到项目里,配置头文件、lib、dll,如果是一个简单点的库,编译加配置起来也不麻烦,可能半个小时或一个上午就能解决;如果是一个复杂点的库,那可能是一天、乃至一周可能都无法编译成功,例如ffmpeg, openssl,gRPC等等,这些库在windows上的的编译极其麻烦,如果是新手,可能更痛苦。相比 java有maven,python有pip,go有go mod, C#有NuGet,Rust有cargo,这些语言在导入第三方库时都很方便,修改版本也方便,但是对于C++项目则很痛苦,vcpkg的出现解决了C/C++编译第三库困难的问题,vcpkg跨平台, 在windows、linux、MacOS都可以使用。安装vcpkg,想要使用哪个库,vcpkg只要一条命令, 直接用安装编译,无需配置头文件、lib、dll, 直接写代码即可,十分的方便。
  官网:https://vcpkg.io

安装vcpkg

1、安装vs英语语言包
  vcpkg安装第三方库时,会有visual studio的语言不是英语的错误,如果不安装英语语言包,使用vcpkg安装第三方库时会有如下报错

Error: in triplet x64-windows: Unable to find a valid Visual Studio
instance The following VS instances were excluded because the English
language pack is unavailable:

例如我的电脑安装的是vs2022社区版,需要修改安装,增加英语语言包

设置-应用-vs2022
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.clone vcpkg
进入你想安装的文件夹(比如D:\vcpkg),打开PowerShell命令行执行

git clone https://github.com/Microsoft/vcpkg.git .

如果网络不好,可能无法clone, 需要有合理良好的网络环境(如何访问github请自查)。
vcpkag clone 好后,执行脚本bootstrap-vcpkg.bat下载vcpkg.exe,如下

$ bootstrap-vcpkg.bat

在这里插入图片描述

安装gtk

如果你的rust环境是gnu的,务必切换回msvc

$ rustup default stable-msvc

直接在vcpkg上安装gtk(最新的vcpkg默认就是gtk4)

$ vcpkg install gtk --triplet x64-windows

在这里插入图片描述
安装好后(安装时间很长,请耐心等待,我等了1个多小时,见上图),只需要设置两个环境变量

(下文的%VCPKGDIR%是你vcpkg的安装目录,不要照搬)

$ SET PKG_CONFIG_PATH %VCPKGDIR%\installed\x64-windows\lib\pkgconfig
$ SET GTK_LIB_DIR %VCPKGDIR%\installed\x64-windows\lib

将vcpkg装好的gtk4库的dll暴露到搜索路径中,加入环境变量PATH中

$ SET PATH=%VCPKGDIR%\installed\x64-windows\bin;%PATH%

然后编写一个Cargo.toml

[dependencies]
gtk = { version = "0", package = "gtk4" }

就可以用gtk-rs开发了

生成的文件不大,release模式编译完,加上dll依赖,用7z压缩完不到6Mb,程序非常小巧。

遇到的问题

一开始,我把vcpkg安装到D:\Program Files\vcpkg下出现如下问题:

Call Stack (most recent call first):  
scripts/cmake/vcpkg_build_make.cmake:151 (vcpkg_execute_build_process) 
scripts/cmake/vcpkg_install_make.cmake:2 (vcpkg_build_make)   
ports/libiconv/portfile.cmake:39 (vcpkg_install_make)   
scripts/ports.cmake:170 ...
error: building libiconv:x64-windows failed with: BUILD_FAILED Elapsed time to handle libiconv:x64-windows: 6.5 min
libtool:   error: 'Files/vcpkg/buildtrees/libiconv/x64-windows-dbg/lib/libcharset.la' is not a directoryCMake Error at 

问题总结:
win11下,能确定的是D:\Program Files\vcpkg需要管理员权限才能可写,至于为什么会出现如上的问题,不得而知;后来我把vcpkg安装到D:\vcpkg下终于编译安装成功。

Rust其他依赖package-confg

下载package-confg工具pkg-config-lite(zip压缩包,我们只需要bin目录下的单文件),并将该可执行文件的目录设置环境变量。

  • 20
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 GTK-rs 需要先安装 GTK+3,可以在 Linux 系统下通过包管理器安装,也可以在 Windows 和 macOS 下从官网下载安装程序进行安装安装 GTK+3 后,可以在 Rust 项目中添加 gtk 和 gdk 两个依赖: ```toml [dependencies] gtk = "0.9" gdk = "0.9" ``` 然后在 Rust 代码中引入 gtk 和 gdk : ```rust extern crate gtk; extern crate gdk; ``` 在 GTK-rs 中,主要有两种方式创建 GUI 窗口:Builder 和手动创建。下面分别介绍这两种方式。 ### 使用 Builder 创建 GUI 窗口 使用 Builder 可以通过 XML 文件描述 GUI 界面,然后使用 Rust 代码加载并显示窗口。以下是一个简单的例子: ```xml <?xml version="1.0" encoding="UTF-8"?> <interface> <object class="GtkWindow" id="main_window"> <property name="title">Hello, World!</property> <property name="default-width">400</property> <property name="default-height">300</property> <child> <object class="GtkLabel" id="label"> <property name="label">Hello, World!</property> </object> </child> </object> </interface> ``` 在 Rust 代码中,可以使用 gtk::Builder 加载并显示窗口: ```rust use gtk::prelude::*; use gtk::{Builder, Window}; fn main() { if let Err(err) = gtk::init() { eprintln!("Failed to initialize GTK: {}", err); return; } let glade_src = include_str!("path/to/glade/file.glade"); let builder = Builder::from_string(glade_src); let window: Window = builder.get_object("main_window").unwrap(); window.show_all(); gtk::main(); } ``` ### 手动创建 GUI 窗口 手动创建 GUI 窗口需要在 Rust 代码中定义窗口和窗口中的组件,以下是一个简单的例子: ```rust use gtk::prelude::*; use gtk::{Window, WindowType, Label}; fn main() { if let Err(err) = gtk::init() { eprintln!("Failed to initialize GTK: {}", err); return; } let window = Window::new(WindowType::Toplevel); window.set_title("Hello, World!"); window.set_default_size(400, 300); let label = Label::new(Some("Hello, World!")); window.add(&label); window.show_all(); gtk::main(); } ``` 以上代码中,创建了一个顶层窗口和一个标签组件,将标签添加到窗口中并显示窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值