rust引入含有openssl相关包报错(openssl未找到和编译运行报错等相关问题)解决方案
1. 问题描述
某天在我的rust程序里引入了actix-proxy = "0.2"这个包,我的程序编译通不过了,rust-analyser也罢工了,错误也提示不出来了,查看错误提示是openssl编译的问题,于是就经过漫长的折腾,终于找到了解决办法
2. 解决办法
2.1 安装vcpkg
参考 https://blog.csdn.net/sexyluna/article/details/115285405 和
https://learn.microsoft.com/zh-cn/vcpkg/get_started/get-started?pivots=shell-powershell
我是在C:\Program Files 目录下运行的git clone,可以参考
安装完后将cvpkg的目录添加到path的环境变量中

关闭命令行窗口
然后打开一个新的cmd或powershell运行,vcpkg version
能正确显示版本就成功了

2.2 用vcpkg安装openssl
参考 https://blog.csdn.net/ywch520/article/details/135565864
运行vcpkg install openssl:x64-windows
等待安装完成
然后添加环境变量
X86_64_PC_WINDOWS_MSVC_OPENSSL_LIB_DIR = 安装目录\vcpkg\packages\openssl_x64-windows\lib
X86_64_PC_WINDOWS_MSVC_OPENSSL_INCLUDE_DIR = 安装目录\vcpkg\packages\openssl_x64-windows\include
X86_64_PC_WINDOWS_MSVC_OPENSSL_DIR = 安装目录\vcpkg\packages\openssl_x64-windows
我的提供参考

2.3 安装perl
参考 https://www.runoob.com/perl/perl-environment.html
per有两个版本,推荐strawberry的msi版本,自动设置环境变量

!!!一定要安装,不然运行时还会报错!
2.4 在tmol中添加如下依赖
openssl = { version = "0.10", features = ["vendored"] }
之前没添加这个,编译没问题,但程序运行不起来。。。
现在,cargo run 吧!!! XD

以上是静态链接的办法,动态链接参考第5节
参考 https://www.cnblogs.com/chy-lionni/p/18420088 ,大佬的文章很有用!!!
2.5 使用别人编译好的版本
未验证,这里的内容是我之前摸索的过程,结合大佬的文章修改了设置错误的环境变量
参考 https://www.cnblogs.com/chy-lionni/p/18420088
2.5.1 下载openssl编译后的包
https://slproweb.com/products/Win32OpenSSL.html
选择完全包

2.5.2 安装
注意下面这一步把dll安装到/bin所在的同级目录

一路回车,最后的捐款可以不选
2.5.3. 设置环境变量
经过实验,主要的环境变量有3个
OPENSSL_DIR = "C:\Program Files\OpenSSL-Win64"
OPENSSL_INCLUDE_DIR = "C:\Program Files\OpenSSL-Win64\include"
OPENSSL_LIB_DIR = "C:\Program Files\OpenSSL-Win64\lib\VC\x64\MTd"
这里的环境变量设置参考的 https://www.cnblogs.com/chy-lionni/p/18420088
他们之间的区别参考这篇文章里的介绍 https://blog.csdn.net/m0_61882573/article/details/139030184,
根据上面的文章显示,似乎切换 OPENSSL_LIB_DIR 的环境变量文件夹可以转换静态或动态链接,但本人未实验!
2.5.4 刷新系统环境变量
以管理员身份执行以下cmd指令
set PATH=C:
关闭cmd窗口,你的环境变量就生效了,不用重启电脑
然后关闭vs code,重新打开项目,rust-analyzer就不再报错,语法分析也恢复正常了!!!
3. 参考文献
https://blog.csdn.net/m0_61882573/article/details/139030184
https://github.com/sfackler/rust-openssl/issues/1793
https://www.taurusxin.com/openssl_win_build/
https://blog.csdn.net/sexyluna/article/details/115285405
https://www.cnblogs.com/chy-lionni/p/18420088
rust引入含有openssl相关包报错(openssl未找到和编译运行报错等相关问题)解决方案的更多相关文章
- VS编译运行报错:找不到ucrtbased.dll文件
VS编译运行报错:找不到ucrtbased.dll文件 在VS2019中配置OpenCV编译,报如下错误: 解决方法:下载缺少的ucrtbased.dll文件,在免费的dll下载网站搜索下载,对应的有 ...
- Archlinux/Manjaro使用笔记-使用makepkg安装软件 报错:未找到strip分割所需的二进制文件 的解决方法
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 使用archlinux或manjaro安装aurman时遇到如下报错 错误:未找到strip分割所需的二进制文件 原因:未安装g ...
- 菜鸟调错(八)—— Maven编译错误:不兼容的类型的解决方案
泛型在实际的工作中应用非常广泛,关于泛型就不在这里赘述了,感兴趣请戳<重新认识泛型>.项目中用到了如下的泛型: public <T> T query(String sql, R ...
- AutoHotKey 使用ADODB读取Excel 报ADODB.Connection 未找到提供程序,可能未提供
一.系统环境 操作系统:Win7 64位 英文版 Office: Office 2010 64位/32位 AutoHotKey:AutoHotKey 1.1.26.01 二.问题现象 安装了A ...
- 【Silverlight】打开Silverlight程序报错,"未找到导入的项目......请确认<Import>声明中的路径正确,且磁盘上存在该文件"
在打开Silverlight程序时,报错(如图所示),程序使用的是Visual Studio 2013和最新的Silverlight版本(Silverlight5). 然后我在网上找了下说:Silve ...
- xcode编译运行报错纪录(持续更新)
---恢复内容开始--- 1. Undefined symbols for architecture i386: "_deflate", referenced from: -[NS ...
- 创建一个MVC解决方案,添加一个控制器后,运行程序报错:”/"未找到服务器
1.创建一个MVC项目,如图
- vs2012 编译运行报 项目程序包Dsp.Bds.dll还原失败,找不到版本xxxxxx的程序包问题的解决方法
原先vs2012程序运行项目是可以了,不会出现程序包Dsp.Bds.dll还原失败,找不到版本未2.0.1.0的程序包问题, 但是项目可以正常运行,每次调试看到下面一片红感觉不舒服 原因:可能当时我看 ...
- Xcode 编译运行报错: CpResource /user/xxxx/ xxx Directory not empty
之前遇到过相同的问题,总是记吃不记打,踩过的坑后面还会踩进去... 仅以次标记加深一下印象 错误特征RT 确认该类型错误是library或frameWork的search路径问题 首先找到编译错误的路 ...
- mybatis报错:未找到参数导致绑定异常
问题: 在映射文件中使用parameterMap元素时出现以下异常: org.mybatis.spring.MyBatisSystemException: nested exception is or ...
随机推荐
- initiator 连接target
客户端 检查是否发现 [root@kvm1 ~]# iscsiadm --mode discovery --type sendtargets --portal 192.168.114.14 1 ...
- 并发编程 - 线程同步(七)之互斥锁Monitor
通过前面对锁lock的基本使用以及注意事项的学习,相信大家对锁的同步机制有了大致了解,今天我们将继续学习--互斥锁Monitor. lock是C#语言中的关键字,是语法糖,lock语句最终会由C#编译 ...
- autMan奥特曼机器人-出现argument list too long报错的解决方法
当你运行一段时间autMan后,可能会出现argument list too long的报错,那是你主机系统限制了autMan运行插件的参数长度,导致的报错,如下: 查看当前ARG_MAX的值 在 L ...
- Flink学习(十二) Sink到JDBC(可扩展到任何关系型数据库)
导入依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java& ...
- 单元测试三部曲-AAA模式
AAA 指的是 "Arrange, Act, Assert",这是一种通用的单元测试模式. 在测试方法中, 1.首先对测试对象进行准备(Arrange), 2.然后调用要测试的方法 ...
- Qt Oracle往数据库里插入或者更新图片
文章目录 Qt Oracle往数据库里插入或者更新图片 前言 读取本地图片文件 QPixmap 转 QByteArray 组成SQL,并执行 Qt Oracle往数据库里插入或者更新图片 前言 最近遇 ...
- rust学习笔记(4)
流程控制 if if n < 0 { print!("{} is negative", n); } else if n > 0 { print!("{} is ...
- antd vue 嵌套表格之实现每次展开一行
在项目中遇到一个需求,就是使用嵌套子表格时,每次只展示一行,且展开一行另一行收起,直接上代码吧,顺便记录一下 这里需要注意,我们要在外层table组件添加如图三个属性,缺一不可,咳咳,不用杠我那个&l ...
- 实验二:D3数据可视化基础
实验目的: 熟悉 D3 数据可视化的使用方法. 实验原理: D3 的全称是(Data-Driven Documents),是一个被数据驱动的文档,其实就是 一个 JavaScript 的函数库,使用它 ...
- 如何每5分钟、10分钟或15分钟运行一次Cron计划任务
一个cron job是一个在指定时间段执行的任务.这些任务可以按分钟.小时.月.日.周.日或这些的任何组合来安排运行. Cron作业一般用于自动化系统维护或管理,例如备份数据库或数据.用最新的安全补丁 ...