You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下用cross交叉编译Rust应用至Ubuntu时遇-lpq找不到错误

解决Windows下用Cross交叉编译Rust+Diesel+Postgres到Ubuntu的链接错误

问题核心

你遇到的cannot find -lpq错误,根源是Cross编译依赖Docker容器内的Linux环境,你在WSL或Windows本地安装的libpq-dev/libpq5、放置的Windows版libpq.dll都不会被容器内的编译流程识别:

  • WSL的库文件在本地文件系统,Cross默认不会挂载到容器;
  • libpq.dll是Windows平台的动态库,Linux链接器需要的是ELF格式的libpq.so,两者完全不兼容。

有效解决方法

方法1:用自定义Docker镜像预安装libpq依赖

  1. 在项目根目录创建Dockerfile.x86_64-unknown-linux-gnu文件:
FROM ghcr.io/cross-rs/x86_64-unknown-linux-gnu:edge
RUN apt-get update && apt-get install -y libpq-dev --no-install-recommends
  1. 新建或修改项目下的Cross.toml配置文件:
[target.x86_64-unknown-linux-gnu]
image = "rust-cross-postgres"
  1. 构建自定义镜像:
docker build -t rust-cross-postgres -f Dockerfile.x86_64-unknown-linux-gnu .
  1. 重新执行编译:
cross build --target x86_64-unknown-linux-gnu

方法2:临时指定Cross安装依赖(快速调试)

直接通过环境变量让Cross在容器内自动安装libpq-dev,无需自定义镜像:

cross build --target x86_64-unknown-linux-gnu --env CROSS_BUILD_DEPS="libpq-dev"

方法3:手动指定Linux版libpq路径(特殊场景)

如果已有现成的Linux版libpq.so(可从Ubuntu容器拷贝或解压deb包获取):

  1. 将libpq.so、头文件及pkgconfig配置文件放到项目内的./linux-libpq/目录;
  2. 编译时指定路径:
cross build --target x86_64-unknown-linux-gnu --env PKG_CONFIG_PATH="./linux-libpq/lib/pkgconfig"

内容的提问来源于stack exchange,提问作者totheendoftheworld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 15:45:55