Cod*_*Lee 6 postgresql libpq rust rust-cargo rust-diesel
我正在尝试(现在几个小时)diesel_cli为 postgres安装货箱。但是,每次我运行推荐的货物命令时:
cargo install diesel_cli --no-default-features --features postgres
Run Code Online (Sandbox Code Playgroud)
我等了几分钟才看到相同的构建失败 -> 中止错误,并显示以下消息:
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`.
Run Code Online (Sandbox Code Playgroud)
我在 docker 容器中运行 postgres,并且在我C:\pgsql的lib和bin目录上都有二进制文件,PATH所以我无法弄清楚为什么它没有链接。他们在文档中没有提到的还有什么要求?
Fro*_*ack 10
在我的情况下,安装成功,但是当我尝试运行它时出现此错误。也许这对有同样问题的其他人有用:
setx PQ_LIB_DIR "C:\Program Files\PostgreSQL\13\lib"(或任何其他 PostgreSQL 库的路径)我在 WSL 上遇到了同样的问题,如果您使用的是 Linux,您可能可以找到 PostgreSQL lib 位置并将其添加到您的环境变量中。
我在 Ubuntu 上遇到了同样的错误,对我来说以下安装解决了这个问题:
sudo apt install libpq-dev
Run Code Online (Sandbox Code Playgroud)
无需移动文件,只需将C:\Program Files\PostgreSQL\14\lib和添加C:\Program Files\PostgreSQL\14\bin到您的路径中即可。安装和运行柴油应该没有问题。
注意:您的路径可能不同,请记住关闭/重新打开终端,以便更新 PATH 变量。
(在 Windows 10 上测试)
将文件夹添加到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命令执行后显示的文件夹中
您可以使用环境变量将路径添加.../lib到编译器的库搜索路径中。它既适用于安装也适用于构建您的项目。RUSTFLAGSdiesel_cli
RUSTFLAGS='-L /usr/local/pgsql/lib' cargo build
Run Code Online (Sandbox Code Playgroud)
在带有 EDB 安装程序的 Windows 上,路径包含空格,因此请改用CARGO_ENCODED_RUSTFLAGS。对于 PowerShell:
$env:CARGO_ENCODED_RUSTFLAGS = "-L`u{1f}C:\Program Files\PostgreSQL\14\lib"
Run Code Online (Sandbox Code Playgroud)