Rust Diesel 链接 `cc` 失败。

7

好的,那么这里有点进展。之前我在我的 Mac M1 上发布了一个与 Rust Diesel 相关的链接器问题,并没有得到任何解决方案。因此,我启动了一个 Ec2 实例并尝试运行这个箱子,结果出现了以下错误:

error: linking with `cc` failed: exit status: 1
...
 = note: /usr/bin/ld: cannot find -lpq

我已经安装了以下内容:

sudo yum update -y
sudo yum install git -y
sudo yum groupinstall "Development Tools" -y
sudo yum install cmake -y
sudo yum install postgresql-libs -y

真的,人们是如何成功运行这个板条箱的?

3个回答

10

来自 Diesel 入门指南:

如果你遇到类似这样的错误:
note: ld: library not found for -lmysqlclient clang: error: linker command failed with exit code 1 (use -v to see invocation)
这意味着你缺少数据库后端所需的客户端库 - 在这种情况下是 mysqlclient。你可以通过安装库(根据您的操作系统通常使用的方式)或使用 --no-default-features 标志排除不需要的默认库来解决此问题。
默认情况下,diesel 依赖于以下客户端库:
- libpq 用于 PostgreSQL 后端 - libmysqlclient 用于 Mysql 后端 - libsqlite3 用于 SQlite 后端
如果您不确定如何安装这些依赖项,请查阅相应依赖项的文档或您的分发包管理器。
例如,如果您只安装了 PostgreSQL,则可以使用以下命令仅安装带有 PostgreSQL 的 diesel_cli:
cargo install diesel_cli --no-default-features --features postgres
错误信息"cannot find -lpq"提示您的链接器找不到PostgreSQL客户端库。

我无法在 EC2 上安装 libpq,但我已经安装了 postgresql-libs,并且收到了相同的错误。我在我的 Mac 上也有这些驱动程序,但结果是 dyld: Symbol not found: _PQconnectdb。我之前用 Python 进行过 postgres 开发,但是这个 diesel crate 似乎是我曾经使用过的最脆弱的东西。 - max89
@max89 这里的答案(https://dev59.com/N1EG5IYBdhLWcg3wN29K)对你有帮助吗? - kmdreko

3
问题是由于缺少库文件引起的。 对于Linux系统。
sudo apt install libpq-dev
cargo install diesel_cli --no-default-features --features postgres

对于Windows系统,需要检查您安装的Rust版本。

rustup --version

然后从中复制libq.lib

C:\Program Files\PostgreSQL\14\lib

to

C:\Users\"Your User"\.rustup\toolchains\"Your version of Rust-Nightly or Stable"\lib\rustlib\x86_64-pc-windows-msvc\lib

对我有用!!

1

我在使用 Fedora 36。问题似乎是由于我电脑上有两个版本的 Postgres,导致 diesel 无法确定使用哪个库。以下是解决方法:

sudo dnf remove postgresql10-libs
sudo dnf install postgresql14-libs
sudo dnf install postgresql14-devel

编辑:这个方法一开始起作用了,但之后又出现了问题。我通过以下方式进行修复:

sudo dnf remove postgresql14-devel
sudo dnf install libpq-devel.x86_64

这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。如果您想在此问题获得新的答案时得到通知,您可以关注此问题。一旦您拥有足够的声望,您还可以添加悬赏以吸引更多关注。- 来自审核 - Terry Raimondo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接