如何在安装时修复 Rust 柴油 cli 链接 libpq.lib 错误

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:\pgsqllibbin目录上都有二进制文件,PATH所以我无法弄清楚为什么它没有链接。他们在文档中没有提到的还有什么要求?

Fro*_*ack 10

在我的情况下,安装成功,但是当我尝试运行它时出现此错误。也许这对有同样问题的其他人有用:

  • 打开 PowerShell
  • 输入setx PQ_LIB_DIR "C:\Program Files\PostgreSQL\13\lib"(或任何其他 PostgreSQL 库的路径)
  • 重启你的电脑
  • 再次运行

我在 WSL 上遇到了同样的问题,如果您使用的是 Linux,您可能可以找到 PostgreSQL lib 位置并将其添加到您的环境变量中。

  • 这对我有用。我不知道在哪里可以找到“已回答”中提到的 libpq.lib 文件,并且输入命令(或在我的情况下复制粘贴)要容易得多并且有效。 (2认同)

use*_*010 9

我在 Ubuntu 上遇到了同样的错误,对我来说以下安装解决了这个问题:

sudo apt install libpq-dev
Run Code Online (Sandbox Code Playgroud)


Wul*_*ulf 9

无需移动文件,只需将C:\Program Files\PostgreSQL\14\lib和添加C:\Program Files\PostgreSQL\14\bin到您的路径中即可。安装和运行柴油应该没有问题。

注意:您的路径可能不同,请记住关闭/重新打开终端,以便更新 PATH 变量。

(在 Windows 10 上测试)


ASp*_*rin 8

将文件夹添加到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.dlllibiconv-2.dlllibssl-1_1-x64.dll进入where diesel命令执行后显示的文件夹中

  • 这不应被视为可接受的答案,因为它只是 @Balen 在下面的答案中提到的解决方法,正确的答案实际上是将 lib 路径添加到 PATH 环境变量,如果您仍然遇到问题,请使用 `cargo clean ` 首先真正获得正确的结果。 (2认同)

Jon*_*oux 6

您可以使用环境变量将路径添加.../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)