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

如何在NixOS系统下通过cargo安装带sqlite支持的diesel-cli?

问题根因

  • NixOS官方源的默认sqlite包默认仅编译动态库,而diesel的sqlite绑定默认优先尝试静态链接libsqlite3,因此链接器无法找到对应静态库文件
  • NixOS不会将第三方库的头文件、库文件路径默认加入全局编译器搜索路径,即使你安装了sqlite和pkg-config,普通shell环境下cargo调用链接器时也无法定位到sqlite的库文件
  • postgres包默认同时提供静态、动态库且pkg-config配置能被正常识别,因此编译postgres版本不会出错

解决方法

方案1:单次编译diesel-cli临时解决

直接通过nix-shell加载带静态库的sqlite依赖,执行安装命令即可:

nix-shell -p pkg-config rustc cargo 'sqlite.override { static = true; }' --run "cargo install diesel_cli --no-default-features --features sqlite"

如果你想要动态链接sqlite,只需要去掉override参数,同时指定禁用diesel的静态链接选项即可:

nix-shell -p pkg-config rustc cargo sqlite --run "DIESEL_SQLITE_STATIC=0 cargo install diesel_cli --no-default-features --features sqlite"

方案2:适配日常Rust项目开发

如果你后续开发Rust项目时也需要链接sqlite,推荐给项目根目录创建shell.nix文件,内容如下:

with import <nixpkgs> {};
mkShell {
  buildInputs = [
    rustc
    cargo
    pkg-config
    # 动态链接用这个
    sqlite
    # 静态链接替换成下面这个
    # (sqlite.override { static = true; })
  ];

  # 配置pkg-config搜索路径,确保cargo能找到sqlite的配置
  PKG_CONFIG_PATH = "${sqlite.dev}/lib/pkgconfig";
}

之后每次进入项目目录,先执行nix-shell进入开发环境,再执行cargo build/cargo run等命令都不会出现链接报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:36:03