Rust中使用ORM框架diesel报错问题
1 起初环境没有问题:在Rust开发的时候起初使用的是mingw64平台加stable-x86_64-pc-windows-gnu编译链,当使用到diesel时会报错,如下:
x86_64-w64-mingw32/bin/ld.exe: cannot find -lmysql具体信息很长这是主要信息是rust找不到链接mysql的驱动在哪里
解决方式:解决找到mysql的安转目录,找到lib目录下的libmysql.dll,把它放到:
C:\Users\hp\.rustup\toolchains\stable-x86_64-pc-windows-gnu\lib\rustlib\x86_64-pc-windows-gnu\lib目录下,问题解决。
担是这是我安装Rust时默认的mingw64编译环境,现在我使用Tauri框架开发跨平台桌面程序,在windows中肯定不行,于是我切换到了visual studio环境下的编译工具链,首先是vs安装了c++的windows的桌面开发环境,具体操做:
切换rust的编译工具:
rustup default stable-x86_64-pc-windows-msvc
默认没有安装该工具就会下载,大小将近2G如果想使用两个环境可以保留两个工具链,如果嫌弃文件过大可删除,如下:
rustup toolchain uninstall stable-x86_64-pc-windows-msvc
生成的文件路径如下:

修改C:\Users\hp\.rustup目录下的settings文件如下:
default_host_triple = "x86_64-pc-windows-msvc"
default_toolchain = "stable-x86_64-pc-windows-msvc"
profile = "default"
version = "12"[overrides]
其中default_host_triple = "x86_64-pc-windows-gnu"要填写正确,否则vscode打开后Rust的代码解析插件始终无法启动:
切换vs环境后就可以使用Tauri 2.x框架开发基于webView的跨平台的桌面程序,同时支持android的快捷开发,后端使用Rust语言,前端使用js,方便地搭建了安卓开发环境和windows桌面开发环境。
2 切换后报符号链接问题:切换工具链后,在Rust使用ORM的diesel框架,又报一些链接错误的问题,比如mysqlClient链接错误,如果你本地安装了mysql就找到lib目录下的mysqlclient.lib配置环境变量和客户端版本号,如果没有安装mysql就去下载MySQL :: Download MySQL Connector/C (Archived Versions)保持all选项
如下:
MYSQLCLIENT_LIB_DIR=C:\Program Files\MySQL\MySQL Server 5.7\lib
MYSQLCLIENT_VERSION=8.0
配置完成后重新编译,此时发现链接不到库的问题解决,但同时发生代码报错问题,代码符号找不到,链接错误等一大堆问题,主要定位到mysqlclient-sys库下的build.rs文件下的95行,当前环境检测失败,无法编译报错。
按照这个可能可行,但由于磁盘有限下载一般就暂停了,这种环境问题的第三方包下载太麻烦,并且报错很可能与vs版本有关,于是就放弃vs的编译工具链。
3: 切换回原来的工具链:如果暂时不开发windows桌面和安卓程序,完全可以使用mingw64平台的工具链环境,这样不容易出错。切换方式比较简单,如下:
rustup default stable-x86_64-pc-windows-gnu 没有就会下载,并修改settings文件中的默认信息,这时可以删除vs的工具链rustup toolchain uninstall stable-x86_64-pc-windows-msvc,注意settings的配置信息,否则vscode的代码解析器插件服务无法启动。
rustup常见命令:
# 查看rustc版本
rustc --version# 显示当前安装的工具链信息
rustup show
# 检查安装更新
rustup update
# 卸载
rustup self uninstall
# 设置当前默认工具链
rustup default stable-x86_64-pc-windows-gnu
# 查看帮助
rustup -h# -------------------------->配置工具链
# 查看工具链
rustup toolchain list
# 安装工具链
rustup toolchain install stable-x86_64-pc-windows-gnu
# 卸载工具链
rustup toolchain uninstall stable-x86_64-pc-windows-gnu
# 设置自定义工具链
rustup toolchain link <toolchain-name> "<toolchain-path>"# -------------------------->配置一个目录以及其子目录的默认工具链
# 查看已设置的默认工具链
rustup override list
# 设置该目录以及其子目录的默认工具链
rustup override set <toolchain> --path <path>
# 取消目录以及其子目录的默认工具链
rustup override unset --path <path># -------------------------->配置工具链的可用目标
# 查看目标列表
rustup target list
# 安装目标
rustup target add <target>
# 卸载目标
rustup target remove <target>
# 为特定工具链安装目标
rustup target add --toolchain <toolchain> <target># -------------------------->配置 rustup 安装的组件
# 查看可用组件
rustup component list
# 安装组件
rustup component add <component>
# 卸载组件
rustup component remove <component>
cargo的基础命令:在用户主目录的 .cargo 目录下新建一个文件,命名为 config(没有扩展名),并输入以下内容配置下载的数据源,不配置下载速度可行
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'## 二选择一
## replace-with = 'XXX' 选择配置# 中国科学技术大学
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"# 清华大学
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
查看cargo版本
cargo --version# 新建项目
cargo new <project_name># 构建项目
cargo build# 运行项目
cargo run# 检查项目
cargo check# 查看帮助
cargo -h
一切切换回来后重新编译原来的Diesel库项目发现没有任何报错,担是在vs平台的编译链上的问题任然存在,如果你想一直基于vs平台下的编译链,建议在安装Rust时就和当前vs环境友好搭配下载安装,而我的是基于mingw64安转的忽略了很多环境切换上的问题,到此windows中使用Rust的ORM框架diesel报错问题初步解决。
4:问题解决:如果你windows上安装了mysql服务,就找到安装目录下的lib目录,在项目中创建build.rs文件指定依赖库的路径,如下代码:
fn main() {// 设置 MySQL 客户端库的搜索路径,找到libmysql.dll和libmysql或mysqlclientprintln!("cargo:rustc-link-search=native=C:\\Program Files\\MySQL\\MySQL Server 5.7\\lib");// 设置需要链接的库名println!("cargo:rustc-link-lib=dylib=libmysql"); // 使用 dylib 表示动态链接
}
如果你本地没有安装过mysql数据库,就从上面地址下载 MySQL :: Download MySQL Connector/C (Archived Versions) 的mysqlClient库,需要注意的是如果你使用vs的编译工具链就确保在链接时使用的是windows下的mysqlClient客户端,即lib下的mysqlclient.lib库文件如果使用的是mingw64平台的stable-x86_64-pc-windows-gnu编译链就去链接libmysql库,如果你链接的是mysqlclient.lib就会报符号链接错误,因为当前使用的是mingw64环境属于跨平台的linux环境需要使用libmysql.lib库,如果是vs环境需要去下载MySQL Connector C 6.1找到lib中的vs14下的mysqlclient.lib,这是windows平台下的,如果报符号错误问题,换一个版本,基本解决(注意:如果你配置了环境变量确保MYSQLCLIENT_LIB_DIR指定的mysql客户端的库的类型 一般下载来的使用C:\Program Files\MySQL\MySQL Connector C 6.1\lib\vs14路径是windows平台下的,如果项目本地没有build.rs配置则该环境变量起作用会发生符号链接错误,而当前你使用的是 stable-x86_64-pc-windows-gnu工具链,是linux环境你因该设置=C:\Program Files\MySQL\MySQL Server 5.7\lib)指定libmysql.lib库如果里面连个都用,最好在创建一个build.rs文件明确指定,否则用到了libmysqlclient下的库仍然报符号错误。
相关文章:
Rust中使用ORM框架diesel报错问题
1 起初环境没有问题:在Rust开发的时候起初使用的是mingw64平台加stable-x86_64-pc-windows-gnu编译链,当使用到diesel时会报错,如下: x86_64-w64-mingw32/bin/ld.exe: cannot find -lmysql具体信息很长这是主要信息是rust找不到链…...
Java 数据库连接池:HikariCP 与 Druid 的对比
Java 数据库连接池:HikariCP 与 Druid 的对比 数据库连接池:HikariCP 1. 卓越的性能表现 HikariCP 在数据库连接池领域以其卓越的性能脱颖而出。 其字节码经过精心优化,减少了不必要的开销,使得连接获取和释放的速度极快。 在…...
04树 + 堆 + 优先队列 + 图(D1_树(D7_B+树(B+)))
目录 一、基本介绍 二、重要概念 非叶节点 叶节点 三、阶数 四、基本操作 等值查询(query) 范围查询(rangeQuery) 更新(update) 插入(insert) 删除(remove) 五、知识小结 一、基本介绍 B树是一种树数据结构,通常用于数据库和操作系统的文件系统中。 B树…...
MATLAB实现单层竞争神经网络数据分类
一.单层竞争神经网络介绍 单层竞争神经网络(Single-Layer Competitive Neural Network)是一种基于竞争学习的神经网络模型,主要用于数据分类和模式识别。其核心思想是通过神经元之间的竞争机制,使得网络能够自动学习输入数据的特…...
AITables首发:基于AI全自动推理设计数据库,国内首创,跑5分钟相当于架构师设计一周!
AITables仅运行5分钟,整个系统的表都设计好了! 随着AI大模型技术的开源普及和平民化,现如今任何一个人都有可能成为超级个体。但随着企业级业务的膨胀和业务挑战增多,我们势必要跟上AI发展的节奏,让AI帮我们设计软件。…...
Go语言中结构体字面量
结构体字面量(Struct Literal)是在 Go 语言中用于创建和初始化结构体实例的一种语法。它允许你在声明结构体变量的同时,直接为其字段赋值。结构体字面量提供了一种简洁、直观的方式来创建结构体对象。 结构体字面量有两种主要形式࿱…...
PaddleOCR 截图自动文字识别
春节假期在家无聊,撸了三个小工具:PC截图编辑/PC录屏(用于meeting录屏)/PC截屏文字识别。因为感觉这三个小工具是工作中常常需要用到的,github上也有很多开源的,不过总有点或多或少的小问题,不利于自己的使用。脚本的编…...
【Blazor学习笔记】.NET Blazor学习笔记
我是大标题 我学习Blazor的顺序是基于Blazor University,然后实际内容不完全基于它,因为它的例子还是基于.NET Core 3.1做的,距离现在很遥远了。 截至本文撰写的时间,2025年,最新的.NET是.NET9了都,可能1…...
UE求职Demo开发日志#21 背包-仓库-装备栏移动物品
1 创建一个枚举记录来源位置 UENUM(BlueprintType) enum class EMyItemLocation : uint8 {None0,Bag UMETA(DisplayName "Bag"),Armed UMETA(DisplayName "Armed"),WareHouse UMETA(DisplayName "WareHouse"), }; 2 创建一个BagPad和WarePa…...
力扣988. 从叶结点开始的最小字符串
Problem: 988. 从叶结点开始的最小字符串 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的先序遍历) 在先序遍历的过程中,用一个变量path拼接记录下其组成的字符串,当遇到根节点时再将其反转并比较大小(字典顺序大小&…...
《PYTHON语言程序设计》(2018版)1.7近似π。利用步幅来进行修改
利用循环的步幅来计算派 利用正常的办法, pi 4 *(1-(1/3)(1/5)-(1/7)(1/9)-(1/11)(1/13)-(1/15)) print(pi)利用这段代码得出结果 我们如何利用循环来进行呢 一、思路 首先我们来利用excel表格来计算一下结果 我做了一个设想,让相加的部分先进行相加,然后再进行减法呢?? 结…...
低通滤波算法的数学原理和C语言实现
目录 概述 1 原理介绍 1. 1 基本概念 1.2 一阶RC低通滤波器模型 2 C语言完整实现 2.1 滤波器结构体定义 2.2 初始化函数 2.3 滤波计算函数 3 应用示例 3.1 噪声信号滤波 3.2 输出效果对比 3.3 关键参数选择指南 4 性能优化技巧 4.1 定点数优化 4.2 抗溢出处理 …...
【BUUCTF杂项题】荷兰宽带数据泄露、九连环
一.荷兰宽带数据泄露 打开发现是一个.bin为后缀的二进制文件,因为提示宽带数据泄露,考虑是宽带路由器方向的隐写 补充:大多数现代路由器都可以让您备份一个文件路由器的配置文件,软件RouterPassView可以读取这个路由配置文件。 用…...
安全策略实验报告
1.实验拓扑图 2.实验需求 vlan2属于办公区,vlan3生产区 办公区pc在工作日时间可以正常访问OAserver,i其他时间不允许 办公区pc可以在任意时间访问Web server 生产区pc可以在任意时间访问OA server但不能访问web server 特例:生产区pc可以…...
Haproxy+keepalived高可用集群,haproxy宕机的解决方案
Haproxykeepalived高可用集群,允许keepalived宕机,允许后端真实服务器宕机,但是不允许haproxy宕机, 所以下面就是解决方案 keepalived配置高可用检测脚本 ,master和backup都要添加 配置脚本 # vim /etc/keepalived…...
亚博microros小车-原生ubuntu支持系列:20 ROS Robot APP建图
依赖工程 新建工程laserscan_to_point_publisher src/laserscan_to_point_publisher/laserscan_to_point_publisher/目录下新建文件laserscan_to_point_publish.py #!/usr/bin/env python3import rclpy from rclpy.node import Node from geometry_msgs.msg import PoseStam…...
Dockerfile构建容器镜像
Dockerfile 是一种文本格式的配置文件,用于自动化构建 Docker 镜像。它包含了一系列指令(命令),每个指令定义了容器镜像构建过程中的一步操作。通过Dockerfile,我们可以指定基础镜像、安装依赖、配置环境变量、复制文件…...
python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
话不多说直接看例子: import re# 原始列表 data [\x16, \x17, s, \x16, hello, \x1A]# 正则表达式匹配以 \x 开头的字符串 pattern r^\\x# 找出以 \x 开头的字符 result [item for item in data if isinstance(item, str) and re.match(pattern, repr(item)[1:-…...
Spring Bean 的生命周期介绍
Spring Bean 的生命周期涉及多个阶段,从实例化到销毁,在开发中我们可以通过各种接口和注解介入这些阶段来定制化自己的功能。以下是详细的生命周期流程: 1. Bean 的实例化(Instantiation) 方式:通过构造函…...
调用腾讯云批量文本翻译API翻译srt字幕
上一篇文章介绍了调用百度翻译API翻译日文srt字幕的方法。百度翻译API是get方式调用,参数都放在ur中,每次调用翻译文本长度除了接口限制外,还有url长度限制,而日文字符通过ur转码后会占9个字符长度,其实从这个角度来讲…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
