安装diesel遇到环境变量的大坑。
要mysqlclient
错误:
error: could not find native static library mysqlclient, maybe an -L flag is missing?
error: Could not compile mysqlclient-sys.
解决方案:需要指定mysqlclient.lib文件的位置,找到这个文件的根目录,添加永久用户变量(高级环境设置里的用户变量会增加这一条):
setx MYSQLCLIENT_LIB_DIR "C:\Program Files\MySQL\MySQL Server 5.7\lib"
这里也有个大坑,详见章节“平台版本冲突”
要链接SQLlite
错误:
Compiling diesel_cli v1.4.1
error: linking withlink.exe
failed: exit code: 1181
|
= note: “C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\link.exe” “/NOLOGO” “/NXCOMPAT” “/LIBPATH:C:一坨一坨省略”
= note: LINK : fatal error LNK1181: cannot open input file ‘sqlite3.lib’error: aborting due to previous error
error: failed to compilediesel_cli v1.4.1
, intermediate artifacts can be found atC:\Users\me\AppData\Local\Temp\cargo-installWriLzQ
Caused by:
could not compilediesel_cli
To learn more, run the command again with --verbose.
解决方法:因为我们开发只用mysql,所以执行
cargo install diesel_cli --no-default-features --features mysql
相比cargo install diesel_cli
,从100多个依赖,变成95个。
平台版本冲突
问题
= note: libcpmt.lib(xthrow.obj) : error LNK2038: mismatch detected for ‘_MSC_VER’: value ‘1900’ doesn’t match value ‘1800’ in libmysqlclient_sys-cd45e48baa434a2c.rlib(net_serv.obj)
libcpmt.lib(syserror.obj) : error LNK2038: mismatch detected for ‘_MSC_VER’: value ‘1900’ doesn’t match value ‘1800’ in libmysqlclient_sys-cd45e48baa434a2c.rlib(net_serv.obj)
LINK : warning LNK4098: defaultlib ‘LIBCMT’ conflicts with use of other libs; use /NODEFAULTLIB:library
libmysqlclient_sys-cd45e48baa434a2c.rlib(xml.obj) : error LNK2001: unresolved external symbol sprintf
libmysqlclient_sys-cd45e48baa434a2c.rlib(libmysql.obj) : error LNK2001: unresolved external symbol sprintf
libmysqlclient_sys-cd45e48baa434a2c.rlib(client.obj) : error LNK2001: unresolved external symbol sprintf
libmysqlclient_sys-cd45e48baa434a2c.rlib(my_time.obj) : error LNK2001: unresolved external symbol sprintf
原因:我安装的是visual studio 2015(MSC_VER是1900),而mysqlclient.lib是用mysql5.7,它是用visual studio 2013 (MSC_VER是1800)编译的,包括里面的mysqlclient.lib,因此存在冲突。
解决办法:要么安装mysql 8,它的mysqlclient.lib符合版本要求;要么安装mysql connector 高版本,C:\Program Files\MySQL\MySQL Connector C 6.1\lib\vs14
下面的mysqlclient.lib符合版本要求。我用的是第二个方法(需要相应修改环境变量)。
安装mysql-connector-c-6.1.11-winx64之后,终于看到了vs14:
我试过用mysql installer删除mysql connector再重新安装,这种方法还是低版本的(C:\Program Files\MySQL\MySQL Connector C 6.1\lib\
下面最高是vs12,没有vs14)
变更环境变量记得重启terminal
结果
一 一搞定上述三个问题后终于完成diesel_cli的安装,此过程脑海中一遍遍响起可爱多的 “这就是翔,一坨一坨的翔”
参考资料
-
https://blog.csdn.net/leo__1990/article/details/89893951
windows上安装MySQL 8 依赖Microsoft Visual C++ 变化 -
https://blog.csdn.net/u012814856/article/details/76343540
问题解决:error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1800”不匹配值“1900” -
https://baike.baidu.com/item/_MSC_VER/9468279?fr=aladdin
visual studio版本和MSC_VER的值 -
https://github.com/diesel-rs/diesel/issues/1286
在官方的issue里,解决方案众说纷纭。 -
https://blog.csdn.net/wangmarkqi/article/details/104618575
前人遇到坑(我比它还多一个)