Rust学习记录 -> 关于Crates.io的问题

2023-11-09


前言

最近我在使用rust语言编写一个商场后端demo时,由于需要与mysql进行交互以及序列化等操作,所以通过crates.io下载了许多外部依赖包,在这个过程中我遇到了由版本更迭,镜像网站之间版本不一所带来的问题,具体如下文所述


问题描述与解析

1.版本更迭带来的依赖包适配问题

部分报错代码如下:

error[E0308]: mismatched types
   --> /home/hadoop/.cargo/registry/src/github.com-1ecc6299db9ec823/lexical-core-0.4.6/src/atof/algorithm/bigcomp.rs:243:55
    |
243 |     let nlz = den.leading_zeros().wrapping_sub(wlz) & (u32::BITS - 1);
    |                                                       ^^^^^^^^^^^^^^^ expected `usize`, found `u32`

error[E0277]: no implementation for `usize & u32`
   --> /home/hadoop/.cargo/registry/src/github.com-1ecc6299db9ec823/lexical-core-0.4.6/src/atof/algorithm/bigcomp.rs:243:53
    |
243 |     let nlz = den.leading_zeros().wrapping_sub(wlz) & (u32::BITS - 1);
    |                                                     ^ no implementation for `usize & u32`
    |
    = help: the trait `BitAnd<u32>` is not implemented for `usize`

error[E0308]: mismatched types
   --> /home/hadoop/.cargo/registry/src/github.com-1ecc6299db9ec823/lexical-core-0.4.6/src/atof/algorithm/bigcomp.rs:261:40
    |
261 |         let (q, r) = shift.ceil_divmod(Limb::BITS);
    |                                        ^^^^^^^^^^ expected `usize`, found `u32`
    |

可以发现报错的外部包是 lexical_core-0.4.6 ,起初我对包中的代码进行修改,发现并无效果,于是开始查询Crates.io官方文档。在查询了 lexical-core包的具体文档以及版本更新情况后,我得知该外部包最新版本已经更新到了0.8.2版本,从镜像网站下载的包已经严重滞后。

以上是出现问题的一个原因,其次,笔者在查询Crates.io官方文档前,还对代码进行了修改,例如将 u32:BITS - 1 修改为 usize:BITS - 1 ,但是报错并未发生变化,所以我还对cargo版本进行查询,对笔者版本(1.55.0)的官方文档进行阅读,对BITS有如下发现:

pub const BITS: u32

The size of this integer type in bits.
Examples

assert_eq!(u32::BITS, 32);
pub const BITS: u32

The size of this integer type in bits.
Examples

assert_eq!(usize::BITS, 64);

所以修改代码后才会无效。

2. openssl

在更换Crates.io镜像源地址后再次运行代码,出现了:Could not find directory of OpenSSL installation 的报错,而我的ubuntu20.04已经安装了openssl最新版本,最后在这里发现了问题的解决方案:

Mac OSX / Homebrew
If you have Homebrew installed:
$ brew install openssl@1.1

Debian / Ubuntu
Using the apt package manager:
$ apt install pkg-config libssl-dev

Fedora / RHEL / CentOS
And using yum:
$ pkg-config openssl-devel

Or with the newer dnf package manager:
$ dnf install pkg-config openssl-devel

转自https://ma.ttias.be/could-not-find-directory-of-openssl-installation/

至此,暂时遇到的问题就全部解决。


总结

首先,由于Rust语言相较于python等语言并不是那么主流,所以在一般的网站及博客中难以找到报错的解决方案,这让我不得不开始阅读官方提供的文档注释,既是一种挑战也是一种成长,习惯后还有些依赖于官方文档。
其次,由于我在安装rust编译环境时使用了上交大源,而在更新Crates.io镜像源时只是简单的更换了中科大源,并未考虑不同镜像源之间的适配问题,比如在更换镜像源过程中,笔者发现对于上文提到的 lexical-core 外部包,不同镜像源网站所提供的版本就是不一致的,所以才导致了生产过程中严重的报错。

最后,经过此次经历,笔者多有成长,也对一些方法的使用更加熟练。至此感谢您的阅读,如有疑问或是指正,还请你不吝赐教。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rust学习记录 -> 关于Crates.io的问题 的相关文章

随机推荐

  • 总结:eclipse编写struts.xml没有提示的问题

    原因 找不到约束文件 解决 联网 手工配 手工配置struts2的dtd约束文件 步骤说明 1 选择 Window gt preferences gt XML gt 点击Add 按钮 2 Location值 通过File System 选择
  • python 财务系统开源系统_10 大顶级开源 ERP 系统

    2014十大顶级开源ERP系统点评 原文网址链接 http www ctocio com hotnews 17865 html 如今 企业资源规划 ERP 和客户关系管理 CRM 系统的必要性已经被各种组织和企业所认可 ERP和CRM能够直
  • 关于“expected ';', ',' or ')' before '&' token”错误

    在GCC编译器上 出现该错误的主要原因是 在C语言里没有C 所谓的 按引用传递 例如C 可以写这样一个函数 void func int a 函数功能 在C语言无法这样使用 所以需要改为地址引用 void func int a 函数功能 具体
  • 基于Jenkins自动打包并部署Tomcat环境

    目录 1 配置git主机 2 配置jenkins主机 3 配置web主机 4 新建Maven项目 5 验证 Jenkins 自动打包部署结果 Jenkins 的工作原理是先将源代码从 SVN Git 版本控制系统中拷贝一份到本地 然后根据设
  • XSS、CSRF、SSRF漏洞的攻击原理以及防御

    目录 XSS 攻击原理 攻击方式 xss漏洞防范 CSRF CSRF攻击成功的两个必要条件 csrf漏洞防范
  • 安装Esxi系统&重装Esxi系统

    安装esxi系统 或者已经安装了esxi需要重装环境 Dell R730服务器 前期准备 将VMware ESXi 5 5 0的安装镜像要提前准备好 通过光碟 U盘 idrac管理界面挂载方式安装都行 1 加载VMware ESXi 5 5
  • 组装一台电脑需要选购哪些基本部件

    1 机箱 一般电脑的主要零件都放在这里 2 显示器 用来看电脑的工作过程 要不然 你都不知道电脑究竟在做什么 3 键盘和鼠标 向电脑输入有用的命令 让它去为我们工作 4 主板 这里是决定你这台电脑性能的重要零件之一 5 内存 当电脑工作时
  • Go Web编程实战(2)----流程控制语句

    目录 流程控制语句 if else语句 for循环语句 用for循环实现do while 用for循环实现while break指定跳出循环 continue语句 for range循环 遍历数组 遍历字符串 遍历map 遍历通道 chan
  • c语言程序位置式pid算法,增量式与位置式PID算法(C语言实现与电机控制项目)...

    4 2核心代码 函数功能 增量PI控制器 入口参数 编码器测量值 目标速度 返回 值 电机PWM 根据增量式离散PID公式 pwm Kp e k e k 1 Ki e k Kd e k 2e k 1 e k 2 e k 代表本次偏差 e k
  • linux 终端使用aplay播放wav

    aplay D plughw 0 0 xxx wav plughw后面的0 0指的是card0 device0 声卡id和设备id 根据个人情况会有不同 声卡id和设备id可以通过aplay l命令来查看 比如 upsquared ubun
  • Redis5.0集群搭建(Redis Cluster)

    Redis集群 redis集群是一个由多个主从节点群组成的分布式服务器群 它具有复制 高可用和分片特性 Redis集群不需要sentinel也能完成节点移除和故障转移的功能 需要将每个节点设置成集群模式 这种集群模式没有中心节点 可水平扩展
  • [1116]mobaxterm使用rz/sz

    安装 yum y install lrzsz 下载 步骤1 sz filename 步骤2 ctrl 鼠标右键 步骤3 Receive file using Z modem 上传 步骤1 rz 步骤2 ctrl 鼠标右键 步骤3 Send
  • ArchLinux安装fcitx5以及拼音输入法

    简介 输入法引擎 需要注意的是 fcitx5 只是提供了基本框架 基本框架只对英文提供了输入支持 如果需要输入其他语言 则需要安装相应的输入法引擎 中文 fcitx5 chinese addons 包含了大量中文输入方式 拼音 双拼 五笔拼
  • SMTP邮件格式、SMTP 协议,SMTP的MIME写法,SMTP发送HTML邮件

    转载 http blog sina com cn s blog 759444350100vx8u html MIME邮件格式 在RFC 2822文档中定义了简单的ASCII编码的Email的邮件格式 然而随着Internet的发展 Emai
  • JSP JSTL 判断List 大小

    JSTL判断List 大小必须先引入的二个核心包 jsp页面判断获得action设置attribute的List是否为空或者list size的长度 就可以用fn这个标签
  • python写的一个-批量下载股票年报的小工具

    python写的一个 批量下载股票年报的小工具 from urllib import request import requests import os import openpyxl print os getcwd def getKeyL
  • Java中怎么定义字符串?

    字符串是 Java 中特殊的类 使用方法像一般的基本数据类型 被广泛应用在 Java 编程中 Java 没有内置的字符串类型 而是在标准 Java 类库中提供了一个 String 类来创建和操作字符串 在 Java 中定义一个字符串最简单的
  • oracle 学习之:for循环中包涵select语句

    oracle中的for循环用法比较简单 但是在一次用到包涵select语句的for循环时 还是发现了一些自己以前没有注意的东西 我的代码如下 declare val1 date val2 date begin for i in select
  • pc端微信二维码支付流程及问题排查

    场景 在做pc端的支付时 我们常用的就是生成二维码让用户去扫码支付 like this 当然你想像我一样有个二维码支付的图片 还需要先申请微信支付的native支付功能 native支付会提供一个二维码供用户扫码 页面内 通常会有一个按钮
  • Rust学习记录 -> 关于Crates.io的问题

    文章目录 前言 问题描述与解析 1 版本更迭带来的依赖包适配问题 2 openssl 总结 前言 最近我在使用rust语言编写一个商场后端demo时 由于需要与mysql进行交互以及序列化等操作 所以通过crates io下载了许多外部依赖