文章目录

  • 前言
  • 问题描述与解析
    • 1.版本更迭带来的依赖包适配问题
    • 2. openssl
  • 总结

前言

最近我在使用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: u32The size of this integer type in bits.
Examplesassert_eq!(u32::BITS, 32);
pub const BITS: u32The size of this integer type in bits.
Examplesassert_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.1Debian / Ubuntu
Using the apt package manager:
$ apt install pkg-config libssl-devFedora / RHEL / CentOS
And using yum:
$ pkg-config openssl-develOr 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 外部包,不同镜像源网站所提供的版本就是不一致的,所以才导致了生产过程中严重的报错。

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

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

  1. Rust dependencies依赖管理crates.io原理梳理

    1. 背景知识 本文针对的是Cargo 1.37版本. Rust项目的依赖主要在Cargo.toml文件[dependencies]段落中定义,常见的依赖方式有: 基于rust官方仓库crates.i ...

  2. Rust语言——cargo、crates.io

    release profile: 是预定义的 可自定义:可使用不同的配置,对代码编译拥有更多的控制 每个profile的配置都独立于其他的profile cargo主要的两个profile: -dev ...

  3. Rust学习记录 -> 线程之间的通道通信

    文章目录 前言 一.管道是什么? 二.使用步骤 1.通道类型 2.通道的定义与使用 3.通道中的所有权问题 4.多信息多线程模拟 总结 前言 在结束线程的学习过后,笔者继续学习了关于多线程通信的工具, ...

  4. rust军用船指令_Rust基础学习笔记(五):Cargo与Crates.io

    最近复习鸽了几天,今天继续学,希望在考试之前搞定这个官方文档 もうダメ.... 本章学习Cargo和Crates.io相关,内容有下: 自定义构建 向crates.io提交libraries 利用工作 ...

  5. Rust学习—解决crates.io 仓库代码下载慢的问题

    今天是学习Rust的第二天,在尝试调用依赖(dependencies)的时候发现非!常!慢!需要采用一些方法来解决. Rust学习-解决crates.io 仓库代码下载慢的问题 今天在下载randra ...

  6. 初学rust——Iterators、Closures、Crates.io and Pointers

    学习rust的第五.六天,学习资料是官网的<The Rust Programming Language>,本笔记的内容包括第13-15章的内容 Chapter 13 Functional ...

  7. Rust crates.io换国内镜像源

    由于众所周知的原因,crates.io在国内访问十分糟糕,轻则编译缓慢,要很久很久,重则直接超时报错,编译不了. 下面就为rust crates.io换上国内中科大的源 1. 进入当前用户的 .car ...

  8. Rust:Cargo check 时 Updating crates.io index 发生错误

    Rust:Cargo check 时 Updating crates.io index 发生错误 问题 解决: 问题 Updating crates.io index warning: spuriou ...

  9. Rust编译加速crates.io

    编译Rust项目时需要访问crates.io, 由于网络环境原因通常比较慢,可以使用国内的crates.io地址: 编辑或新建~/.cargo/config文件,添加以下内容: [source.cra ...

最新文章

  1. windows和linux文件的转换
  2. Windows安全策略
  3. Bitmap基本概念及在Android4.4系统上使用BitmapFactory的注意事项
  4. Waymo无人车高层动荡:CFO今日也走了,半年已失8名高管
  5. Journey to Un‘Goro 贪心,找规律,搜索(沈阳)
  6. java poi导入50万数据_java从oracle读取50万条数据写入Excel中抛GC overhead limit exc
  7. Fabricjs在Canvas上使用路径Path绘制不规则图形
  8. 解读区块链,软分叉和硬分叉
  9. 新后缀勒索病毒.phobos 解密成功 sql数据恢复
  10. 诺依曼体系结构、哈佛体系结构与改进型哈佛结构之间的区别
  11. .NET Core开源组件:后台任务利器之Hangfire
  12. ltv价值 应用_用户终生价值Ltv是什么,在游戏设计中如何考虑?
  13. word List 10
  14. nginx subrequest演示示例程序
  15. fineuploader php服务端
  16. mysql 词频分析工具_hive进行词频统计
  17. 是什么门的缩写_开车:和她结婚需要注意什么
  18. 平行哲学与智能技术:平行产业与智慧社会的对偶方程与测试基础
  19. 栈——栈的基本概念和基本操作
  20. 会议OA项目(项目原型图介绍发布会议功能)

热门文章

  1. 博客平台:评论发布与删除、评论回复、评论点赞、举报、关注、收藏模块
  2. QCC3040---htf文件修改
  3. 北大肖臻老师《区块链技术与应用》系列课程学习笔记[7]比特币-分叉
  4. 个人计算机基本配置,DIY个人计算机配置的小建议
  5. Mr.D_速学“凯利公式”
  6. 如何在 Python 中删除文件或文件夹?
  7. Arduino温度传感器之继电器控制风扇
  8. 安川机器人程序还原_安川机器人报错代码:功能概要和程序数据简易修复方法...
  9. 关于自动白平衡的算法问题
  10. python记忆口诀-学妹问我:如何提高编程能力