首页 > 系统相关 >在Windows10中使用rust的diesel库

在Windows10中使用rust的diesel库

时间:2024-09-19 16:04:46浏览次数:9  
标签:cargo lib diesel Windows10 报错 build libmysqlclient rust

介绍

最近在学习Actix Web时,需要用到数据库操作,简单尝试了一下diesel,也遇到了一些问题。在这里记录一下,供大家参考。

1.安装

根据Diesel官网介绍,使用cargo binstall安装diesel cli。

cargo binstall diesel_cli

如果报错 error: no such command: `binstall` 需要先安装cargo-binstall库,再安装diesel_cli

cargo install cargo-binstall

建议使用binstall安装,会根据系统找到正确的二进制文件。

2.项目中使用diesel

新建项目或者使用已有项目。

添加依赖

在Cargo.toml中,添加diesel依赖项

[dependencies]
diesel = { version = "2.2.4", features = ["mysql"] }
dotenvy = "0.15.7"

创建.env文件

在项目中,创建.env文件,并将数据库URL配置信息保存到文件中

DATABASE_URL=mysql://username:password@server_ip/database_name

配置好之后,执行diesel cli命令

diesel setup

此时大概率会遇到报错(忘记截图了),原因在diesel连接数据库时,找不到libmysqlclient。
如果此时,尝试执行cargo build同样也会报错,报错原因是diesel这个crate的依赖mysqlclient-sys build失败,查看失败日志,同样是由于找不到libmysqlclient。

安装libmysqlclient

通过github上mysqlclient-sys的README中的描述,通过vcpkg命令安装libmysqlclient

vcpkg install libmysql:x64-windows-static-md

安装后查看已安装的内容,已安装好mysqlclient的lib文件

此时执行diesel setup不再报错,但是cargo build还会报错仍然是找不到libmysqlclient,原因是由于在cargo build时,需要指定mysqlclient.lib的位置。在环境变量中配置MYSQLCLIENT_LIB_DIRMYSQLCLIENT_VERSION

配置完环境变量后,不再报找不到libmysqlclient库,出现的新的问题。如:
error LNK2019: 无法解析的外部符号 __imp_CertOpenStore,函数 capi_open_store 中引用了该符号

熟悉C++的朋友对这些报错肯定不陌生,是比较常见的链接错误,在Visual Studio中可以通过项目配置附加依赖项解决。
在rust的build过程报错,同样需要在rust项目中进行配置。

通过缺少的依赖,确定是win10 SDK中的lib,分别是Crypt32.libUser32.lib,找到两个lib文件所在的目录(不同机器上版本号可能不同,替换自己即可)

C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x64

在项目中创建build.rs文件,在文件中加入如下内容

fn main() {
    println!("cargo:rustc-link-search=native=C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.19041.0\\um\\x64");
    println!("cargo:rustc-link-lib=crypt32");
    println!("cargo:rustc-link-lib=user32");
}

并在Cargo.toml文件的package中指定build.rs,如:

[package]
name = "diesel_demo"
version = "0.1.0"
edition = "2021"
build= "build.rs"

完成上述操作后,再次执行cargo build,成功build。

总结

至此,win10操作系统中,在rust项目diesel crate操作数据库已调通。后续根据diesel官网的例子,可以进行CRUD操作。

标签:cargo,lib,diesel,Windows10,报错,build,libmysqlclient,rust
From: https://www.cnblogs.com/spanner/p/18420461

相关文章

  • VMware安装windows10
    1、创建虚拟机,选择典型即可2、选择稍后安装系统3、操作系统选择MicrosoftWindows,版本选择windows10x64和windows10都可4、虚拟机名称修改及位置选择,我这里直接安装到D盘(注意:若磁盘下没有你选择的目录,电脑会自动创建一个你设定的目录)5、此处使用推荐即可,60G并非......
  • windows下rust使用openssl
    静态链接以vcpkg安装,配置环境变量|环境变量名称|环境变量地址|||X86_64_PC_WINDOWS_MSVC_OPENSSL_DIR|C:\src\cctvhddomestically_vcpkg\packages\openssl_x64-windows-static|||X86_64_PC_WINDOWS_MSVC_OPENSSL_INCLUDE_DIR|C:\src\cctvhddomestically_......
  • 828 华为云征文|华为 Flexus 云服务器部署 RustDesk Server,打造自己的远程桌面服务器
    ......
  • 使用rust自制操作系统内核
    一、系统简介本操作系统是一个使用rust语言实现,基于32位的x86CPU的分时操作系统。项目地址(求star):GitHub-CaoGaorong/os-in-rust:使用rust实现一个操作系统内核详细文档:自制操作系统·语雀1.项目特性在本项目的实现上,我认为该项目有一下特性:特性说明rust语言实......
  • 我在使用C语言编程的时候可以完全了解内存中数据的情况,每一个字节每一个比特都能了如
    在Rust中,虽然编译器默认会帮助你管理内存,提供安全的抽象,但你仍然可以像在C语言中一样,完全掌控每个字节、每个位的操作。Rust提供了多种方式来实现对内存的精细控制,只是默认情况下这些操作受到更多的安全检查和限制。以下是一些方法,帮助你在Rust中实现对内存的精确控制:1.......
  • Rust中的&运算符取一个变量的地址与C/C++中意义相同么?如果不同又有什么区别呢?
    Rust中的&运算符与C/C++中的&运算符有相似之处,但它们的行为和作用有一些关键区别,特别是在所有权、内存安全和编译期检查方面。1.相似之处在Rust和C/C++中,&运算符都用于获取变量的地址,即生成一个指针或引用。它们的作用可以概括为:将一个值的引用或地址作为结果,而不......
  • Rust有指针类型数据吗?是否可以查看一个变量的内存地址?
    在Rust中,虽然不像C/C++那样直接使用传统的指针类型,但Rust依然有指针的概念,且提供了多种安全的方式来操作和管理内存。你可以通过一些Rust的特性查看变量的内存地址并安全地进行指针操作。1.引用(References)Rust的引用(&和&mut)可以理解为一种安全的、受所有权规则和借......
  • 详细的解释Rust语言中所增加的新概念
    Rust是一门注重性能和安全性的系统级编程语言,其设计目标之一是避免传统系统编程语言(如C和C++)中常见的内存管理错误。为实现这些目标,Rust引入了一些新的编程概念,这些概念是Rust的核心,帮助开发者编写出高效、安全且易于维护的代码。以下是Rust中一些重要的新概念及其详细解......
  • 我使用本地windows11上的VSCode远程连接到ubuntu进行RUST程序开发,我在VSCode上安装了
    当你使用VSCode的Remote-SSH扩展从本地Windows11连接到远程的Ubuntu服务器进行开发时,插件的安装有以下行为:插件的安装位置本地插件:某些插件,例如VSCode的界面插件或与本地编辑器相关的插件,安装在你的本地Windows系统上。这些插件不需要与远程服务器交互,因此它们仅......
  • 怎样在windows上使用VSCode连接到ubuntu服务器开发并调试RUST程序?
    要在Windows上使用VSCode连接到Ubuntu服务器,开发并调试Rust程序,你可以使用VisualStudioCode的Remote-SSH扩展,这个扩展可以让你通过SSH连接到远程服务器,直接在远程服务器上进行开发、调试和执行。以下是具体步骤:1.安装VSCode和必要的扩展首先,你需要在Windo......