Rust和Windows不得不说的事儿
6 分钟前
很多Rust新手(包括一些老手)在Windows上搭建Rust开发环境的时候,总是会纠结到底安装MSVC版还是GNU版本。
刚开始我也遇到过此类问题,大概在1年前(本人使用Rust差不多2年),因为有使用MSYS2的经验,所以刚开始优先装的是GNU版本,不过自从某机缘下研究了Diesel作者的pg-sys的源码后,意外发现了微软自家的vcpkg这么个好东西,从此就只使用MSVC版本了,相信读完本文章后,你们也会的:)
首先,是vcpkg项目地址:Microsoft/vcpkg,各位英文肯定比我好,所以不用我来介绍此项目了
其次准备环境:
Windows版本的Git
Visual Stuido,社区版就可以,√上C/C++工具链以及Win SDK
按照vcpkg的项目指引,编译vcpkg,最后添加环境变量:
PATH里添加vcpkg.exe所在的目录
VCPKG_HOME设置成vcpkg代码路径
最最最重要的是设置VCPKGRS_DYNAMIC这个环境变量,1或者true随便,确保存在就行
下面就以很多人碰到的编译安装diesel_cli这个工具的场景来介绍如何使用vcpkg,根据错误提示,我们知道diesel_cli依赖libpq, libmysqlclient, libsqlite3这3个库,那我们分别执行:
vpkg search pq
vcpkg install libpq:x64-windows //如果是64位系统的话,不加冒号后面默认是32位
vcpkg search mysql
vcpkg install libmysql
vcpkg search sqlite3
vcpkg install sqlite3
安装完,我们怎么确保Rust确实能找到这些库呢?这里就需要另一个工具了,Rust的vcpkg_cli(其实还对应一个vcpkg库,后面会说),顺便提下,这个工具我也提过pr,因为在早期版本无法probe xxx-1.0这种形式的库,最新版已经换了probe机制了,桑心。。。
cargo install vcpkg_cli
vcpkg_cli probe sqlite3
vcpkg cli probe libmysql
vcpkg cli probe libpq
会看到会列出头文件和库的路径,然后这些信息会被相应crate的build.rs里使用。
然后我们就开心的cargo install diesel_cli啦。。。
所有这一切的前提是,这个crate使用了vcpkg来写build.rs,那么肯定有同学问了,如果我使用的上游库没有使用怎么办?当然是自己写个提PR啦,不过前提是依赖在vcpkg search里能搜到哦,不然要先给vcpkg仓库提PR,嘿嘿。。。
比如我给某不可描述的工具使用的libsodium-ffi 提的PR,https://github.com/zonyitoo/libsodium-ffi/pull/6,稍微看看就知道怎么写了,很简单的。
如果有疑问,欢迎留言,因为此文章都是靠记忆写的,很多环境我都搭建好了,也许有遗漏。
编辑于 17:12
Rust 编程
网友评论