我正在尝试(几个小时以来)为 postgres 安装货物箱
diesel_cli
。但是,每次我运行推荐货物命令时:
cargo install diesel_cli --no-default-features --features postgres
我等了几分钟,只是看到相同的构建失败并显示以下消息:
note: LINK : fatal error LNK1181: cannot open input file 'libpq.lib'
error: aborting due to previous error
error: failed to compile `diesel_cli v1.4.1`, intermediate artifacts can be found at `C:\Users\<user name here>\AppData\Local\Temp\cargo-installUU2DtT`
Caused by:
could not compile `diesel_cli`.
我在docker容器中运行postgres,并将二进制文件放在我的
C:\pgsql
上,lib
和bin
目录都在PATH
上,所以我不明白为什么它没有链接。他们在文档中没有提到的其他可能要求是什么?
就我而言,安装成功,但当我尝试运行它时,发生了此错误。 也许这对其他有同样问题的人有用:
setx PQ_LIB_DIR "C:\Program Files\PostgreSQL\13\lib"
(或 PostgreSQL 库的任何其他路径)我对 WSL 也有同样的问题,如果你使用的是 Linux,你可能可以找到 PostgreSQL lib 位置并将其添加到你的环境变量中。
更新:
下面的答案是针对旧版本的解决方法。请先检查是否可以执行
cargo clean
原版
将文件夹添加到
PATH
变量没有帮助,至少在我的情况下是这样,因为出于某种原因,它没有在传递给 /LIBPATH
的 link.exe
参数中使用。
就我而言,是C:\Users\<username>\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib
您可以在错误消息的开头看到它。
将 libpq.lib
复制到那里,将从那里使用它。
安装后柴油机需要一些其他组件。将
libcrypto-1_1-x64.dll
、libiconv-2.dll
和libssl-1_1-x64.dll
复制到where diesel
命令执行后显示的文件夹中
我在 Ubuntu 上遇到了同样的错误,对我来说以下安装解决了问题:
sudo apt install libpq-dev
无需移动文件,只需将
C:\Program Files\PostgreSQL\14\lib
和 C:\Program Files\PostgreSQL\14\bin
添加到您的 PATH 即可。安装和运行柴油应该没有问题。
注意:您的路径可能不同,请记住关闭/重新打开终端,以便更新 PATH 变量。
(在 Windows 10 上测试)
如果您在环境无效时尝试进行货物构建(或任何运行 libpq rust crate 的构建脚本),那么您需要在修复环境后执行
cargo clean
否则您仍然会获得 libpq。即使 lib 位于您的 PATH 中,也未找到错误。将文件复制到另一个目录的其他答案只是黑客
为 Windows 提供清晰的步骤:
添加 C:\Users
复制 C:\Program Files\PostgreSQL \lib 中的 libpq.lib (显然这是版本 14)并将其粘贴到 C:\Users
您可以使用
.../lib
环境变量将
RUSTFLAGS
的路径添加到编译器的库搜索路径中。它既适用于安装diesel_cli
,也适用于构建您的项目。
RUSTFLAGS='-L /usr/local/pgsql/lib' cargo build
在带有 EDB 安装程序的 Windows 上,路径包含空格,因此请使用
CARGO_ENCODED_RUSTFLAGS
代替。对于 PowerShell:
$env:CARGO_ENCODED_RUSTFLAGS = "-L`u{1f}C:\Program Files\PostgreSQL\14\lib"
这就是我在我的案例中必须做的:
编辑$HOME/.cargo/config.toml:
[target.x86_64-pc-windows-msvc.pq]
rustc-link-search = ["C:\\Program Files\\PostgreSQL\\13\\lib"]
rustc-link-lib = ["libpq"]
确保将
rustc-link-search
替换为包含 libpq.lib 文件的路径。