< 返回版块

2019-04-30 20:41    责任编辑:jay

标签:rust,windows

本文转载自:https://zhuanlan.zhihu.com/p/64344775

Rust和Windows不得不说的事儿

Matrix

Matrix

I'm matrix!

很多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,最后添加环境变量

  1. PATH里添加vcpkg.exe所在的目录
  2. VCPKG_HOME设置成vcpkg代码路径
  3. 最最最重要的是设置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,稍微看看就知道怎么写了,很简单的。

如果有疑问,欢迎留言,因为此文章都是靠记忆写的,很多环境我都搭建好了,也许有遗漏。