Rust语言GUI库之gtk安装

news2024/11/23 9:33:05

文章目录

    • 工具链安装管理软件vcpkg
      • vcpkg介绍
      • 安装vcpkg
    • 安装gtk
    • 遇到的问题
    • Rust其他依赖package-confg

工具链安装管理软件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目录下的单文件),并将该可执行文件的目录设置环境变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1306360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tensorboard可视化远程服务器上保存的训练文件

方法一: 最简单的,把服务器上的训练权重文件下载到本地,使用本地的tensorboard打开 方法二: 使用VsCode的remote ssh插件,可以通过端口映射,将远程的6006端口映射到本地,直接访本地的6006即可…

华清远见嵌入式学习——QT——作业4

作业要求&#xff1a; 代码运行效果图&#xff1a; 代码&#xff1a; 头文件&#xff1a; #ifndef ALARMCLOCK_H #define ALARMCLOCK_H#include <QWidget> #include <QTimerEvent> #include <QTimer> #include <QTime> #include <QTextToSpeech&g…

优雅玩转实验室服务器(二)传输文件

使用服务器最重要的肯定是传输文件了&#xff0c;我们不仅需要本地的一些资源上传到服务器&#xff0c;好进行实验&#xff0c;也需要将服务器计算得到的实验结果传输到本地&#xff0c;来进行预览或者报告撰写。 首先&#xff0c;由于涉及到服务器操作&#xff0c;我强烈推荐…

[C++进阶]---AVL树模拟实现

目录 1.AVL树的概念2.AVL树模拟实现2.1AVL树节点的定义2.2AVL的插入2.3AVL树的旋转2.3.1左单旋2.3.2右单旋2.3.3右左双旋2.3.3.1旋转情况分析2.3.3.2平衡因子更新分析 2.3.4右左双旋2.3.4.1旋转情况分析2.3.4.2平衡因子更新分析 2.3.5AVL树的验证 3.AVL模拟实现源码4.总结 1.AV…

yarn或者pnpm第一次执行的时候遇到报错yarn : 无法加载文件......因为在此系统上禁止运行脚本

报错&#xff1a; yarn : 无法加载文件 C:\Users\rina2\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/http://go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 解决方案&#xff1a…

基于龙蜥(AnolisOS7.9)编译ZLMediaKit

系统安装 镜像下载 下载地址&#xff1a;https://openanolis.cn/download VirtualBox 下载地址&#xff1a;https://download.virtualbox.org/virtualbox/7.0.12/VirtualBox-7.0.12-159484-Win.exe ZLMediaKit编译 编译器和Cmake sudo yum -y install gcc sudo yum -y …

移动端机器学习框架 MDL 简介与实践

Mobile-deep-learning&#xff08;MDL&#xff09; MDL 是百度研发的可以部署在移动端的基于卷积神经网络实现的移动端框架&#xff0c;可以应用在图像识别领域。 具体应用&#xff1a;在手机百度 App 中&#xff0c;用户只需要点击自动拍开关&#xff0c;将手机对准物体&…

二、SpringFramework 介绍

2.1 Spring 和 SpringFramework概念 https://spring.io/projects 广义的 Spring&#xff1a;Spring 技术栈&#xff08;全家桶&#xff09; 广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。 经过十多年的发展&#xff0c;Spring 已经不再是一个单纯的应…

Linux实操——Tomcat安装

Tomcat安装 一、下载Tomcat包&#xff0c;并通过ftp上传到服务器二、解压安装包三、启动Tomcat四、验证是否安装完成 总结 博主最近项目上线了&#xff0c;终于能愉快的摸鱼了&#xff0c;额。。。那是不存在的&#xff0c;作为最勤奋的码农一份子&#xff0c;也是试着搭建一个…

隔离电源与非隔离式电源

开关电源 文章目录 开关电源前言一、它们之间的区别是什么&#xff1f;二、如何区分它们呢&#xff1f;三、隔离电源与非隔离电源的优缺点四、隔离电源与非隔离电源的选择总结 前言 在产品设计时&#xff0c;倘若没有考虑应用环境对电源隔离的要求&#xff0c;产品到了应用时就…

石油化工园区:安全管理工作中的挑战与措施

石油化工园区&#xff1a;安全管理工作中的挑战与措施 石油化工园区是一种设备设施多且结构复杂的工业园区&#xff0c;涉及到易燃易爆或有毒介质&#xff0c;同时园区内有大量的工作人员和工作车辆等动态参与要素。由于园区的特殊性质&#xff0c;安全管理工作显然具备较高的挑…

外网访问内网服务器使用教程

如何在任何地方都能访问自己家里的笔记本上的应用&#xff1f;如何让局域网的服务器可以被任何地方访问到&#xff1f;有很多类似的需求&#xff0c;我们可以统一用一个解决方案&#xff1a;内网穿透。内网穿透的工具及方式有很多&#xff0c;如Ngrok、Ssh、autossh、Natapp、F…

小学生台灯买什么样的合适?精选专业的学生台灯

随着时代的发展和进步&#xff0c;孩子的教育也提升了很多。但很多家长可能并不知道&#xff0c;其实现在的学生不管处小学还是初高中&#xff0c;他们的学习压力都是比我们以前大很多的。繁重的功课让他们经常用眼过度&#xff0c;这也是如今这么多孩子过早近视的主要原因。所…

妙手ERP特色功能来袭:上线Lazada包邮营销功能,全方位助力卖家高效引流!

包邮是线上消费者作出购买决策的重要因素&#xff0c;据Lazada平台调研显示&#xff1a;73%的受访者希望商品免费配送&#xff0c;有84%的消费者使用过Lazada包邮优惠券&#xff0c;其中75%的消费者对此感到满意。由此可见&#xff0c;包邮已成为打动东南亚消费者下单的主要原因…

iOS应用程序签名、重签名及安装测试优化指南

iOS应用程序的签名、重签名和安装测试 ipa编译出来后&#xff0c;或者ipa进行修改后&#xff0c;需要进行重新签名才能安装到测试手机&#xff0c;或者提交app store供apple 商店审核上架。ipaguard有签名和重签名功能&#xff0c;能在windows&#xff0c;mac&#xff0c;和li…

深度学习在人体动作识别领域的应用:开源工具、数据集资源及趋动云GPU算力不可或缺

人体动作识别检测是一种通过使用计算机视觉和深度学习技术&#xff0c;对人体姿态和动作进行实时监测和分析的技术。该技术旨在从图像或视频中提取有关人体姿态、动作和行为的信息&#xff0c;以便更深入地识别和理解人的活动。 人体动作识别检测的基本步骤包括&#xff1a; 数…

第六届“泰迪杯”数据分析技能赛颁奖会圆满落幕

12月8日至10日&#xff0c;“广东省&#xff08;广州&#xff09;工业与应用数学学会 2023年年会暨数学建模颁奖大会在深圳职业技术大学留仙洞校区隆重举行。本次会议由广东省&#xff08;广州&#xff09;工业与应用数学学会主办&#xff0c;深圳职业技术大学工业训练中心承办…

快速整合EasyExcel实现Excel的上传下载

1.EasyExcel 2.Excel的上传&#xff08;读Excel&#xff09; 3.Excel的下载&#xff08;写Excel&#xff09; 4.结语 1.EasyExcel 首先&#xff0c;这里给出EasyExcel的官方文档&#xff1a;https://easyexcel.opensource.alibaba.com/ alibaba.com不用我多说了吧&#xff0c;大…

C语言实现直接插入排序

完整代码&#xff1a; #include<stdio.h>//直接插入排序&#xff0c;从小到大 //参数&#xff1a;arr[]表示待排序数组&#xff0c;len表示该数组长度 void insert_sort(int arr[],int len){//arr[i]表示待插入的那个数//tmp保存待插入那个数的值//arr[j]用来移动数据in…

Mongdb常用复杂语句(nosql)总结

➡️ ➡️ 关于 MongoDB和MongoTemplate 嵌套数据判空查询 的讨论 ⬅️ ⬅️ 在本篇文章中小名会时常维护些来不及分类的日工作常用的复杂语句&#xff1a; 1、按照表id查询 db.getCollection(TABLE_NAME).find({"_id":ObjectId("62947c8fe2a399286a7259f7&q…