如何使用 Docker 中安装的 Postgres 工具修复diesel_cli链接libpq.lib错误?

问题描述 投票:0回答:8

我正在尝试(几个小时以来)为 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
上,所以我不明白为什么它没有链接。他们在文档中没有提到的其他可能要求是什么?

postgresql rust rust-cargo libpq rust-diesel
8个回答
31
投票

就我而言,安装成功,但当我尝试运行它时,发生了此错误。 也许这对其他有同样问题的人有用:

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

我对 WSL 也有同样的问题,如果你使用的是 Linux,你可能可以找到 PostgreSQL lib 位置并将其添加到你的环境变量中。


21
投票

更新:

下面的答案是针对旧版本的解决方法。请先检查是否可以执行

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
命令执行后显示的文件夹中


8
投票

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

sudo apt install libpq-dev

5
投票

无需移动文件,只需将

C:\Program Files\PostgreSQL\14\lib
C:\Program Files\PostgreSQL\14\bin
添加到您的 PATH 即可。安装和运行柴油应该没有问题。

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

(在 Windows 10 上测试)


4
投票

如果您在环境无效时尝试进行货物构建(或任何运行 libpq rust crate 的构建脚本),那么您需要在修复环境后执行

cargo clean
否则您仍然会获得 libpq。即使 lib 位于您的 PATH 中,也未找到错误。将文件复制到另一个目录的其他答案只是黑客


3
投票

为 Windows 提供清晰的步骤:

  1. 添加 C:\Users.rustup oolchains\stable-x86_64-pc-windows-msvc\lib 环境变量中路径中的ustlib\x86_64-pc-windows-msvc\lib

  2. 复制 C:\Program Files\PostgreSQL \lib 中的 libpq.lib (显然这是版本 14)并将其粘贴到 C:\Users.rustup oolchains\stable-x86_64-pc-windows-msvc\lib 中 ustlib\x86_64-pc-windows-msvc\lib


3
投票

您可以使用

.../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"

0
投票

这就是我在我的案例中必须做的:

编辑$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 文件的路径。

© www.soinside.com 2019 - 2024. All rights reserved.