在 Windows 环境使用diesel库的时候,经常遇到找不到lib的错误。本文说明MySQL、Postgres、和SQLite三种数据库配置方法。
问题描述
安装diesel命令行工具:
cargo install diesel_cli
可能会出现类似的错误
error: linking with `link.exe` failed: exit code: 1113
|
= note: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14
.16.27023\\bin\\HostX64\\x64\\link.exe" "/NOLOGO"
"/NXCOMPAT" "/LIBPATH:C:\\Users\\admin\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib"
...
= note: Non-UTF-8 output: LINK : fatal error LNK1113: \xce\xde\xd0\xa7\xb5\xc4\xbc\xc6\xcb\xe3\xbb\xfa\xc0\xe0\xd0\xcd 0x1C2\r\n
error: aborting due to previous error
这表示找不到某种数据库的链接库,默认情况下,diesel会同时找MySQL、Postgres、SQLite的链接库,如果我们只用到Postgres数据库,可以这样写
cargo install diesel_cli --no-default-features --features postgres
但是,仅使用一种数据库仍然可能报错,可以参考下面内容解决。
解决办法
MySQL
- 下载MySQL Connector/C
- 解压缩文件到任意目录,并配置
MYSQLCLIENT_LIB_DIR
环境变量到该目录 - 检查是否配置成功
cargo install diesel_cli --no-default-features --features mysql
SQLite
- 自行编译或者从这里下载SQLite库文件
sqlite3.lib
- 把库文件放到链接器lib目录
怎么确定lib目录的位置呢?报错信息会说明使用链接器路径,比如我的环境是C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX64\x64\link.exe
,对应的lib目录C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib
,下面有x86
和x64
两个
目录,分表表示32和64位的库,把库文件放入相应目录即可。 - 检查是否配置成功
cargo install diesel_cli --no-default-features --features sqlite
Postgres
- 安装Postgres,找到
libpq.lib
和libpq.dll
,放到链接器lib目录,参考SQLite配置的第2步。 - 检查是否配置成功
cargo install diesel_cli --no-default-features --features postgres