如何在 NixOS 和 cargo 下安装具有 sqlite 支持的diesel-cli?

Posted

技术标签:

【中文标题】如何在 NixOS 和 cargo 下安装具有 sqlite 支持的diesel-cli?【英文标题】:How to install diesel-cli with sqlite support under NixOS and cargo? 【发布时间】:2021-11-29 12:00:31 【问题描述】:

当我尝试用

安装diesel-cli
cargo install diesel_cli --no-default-features --features sqlite

在 NixOS 下,我得到了

error: linking with `cc` failed: exit status: 1
...
 = note: /nix/store/kmqs0wll31ylwbqkpmlgbjrn6ny3myik-binutils-2.35.1/bin/ld: cannot find -lsqlite3
          collect2: error: ld returned 1 exit status

即使安装了 Nix 软件包 sqlitepkg-config。对我来说,这看起来像 sqlite 缺少它的静态库,但是我没有看到在 https://github.com/NixOS/nixpkgs/blob/nixos-21.05/pkgs/development/libraries/sqlite/default.nix 中启用任何标志。

注意:

    安装postgres nix 包并编译diesel-cli
cargo install diesel_cli --no-default-features --features postgres

完美运行。

    安装diesel-cli 的解决方法是使用同名的Nix 包https://github.com/NixOS/nixpkgs/blob/nixos-21.05/pkgs/development/tools/diesel-cli/default.nix,它带有启用的sqlite 支持。不过,我想知道如何自己编译它,并且尝试编译 Rust 项目将失败并出现上述相同的错误。

【问题讨论】:

你是否安装了 nix sqlite 包,无论是在全局环境中还是在当前 shell 中? 对不起,我没有注意到你已经在你的问题中注意到了这一点。请看看我的回答是否有帮助。 【参考方案1】:

编译似乎使用以下shell.nix

 pkgs ? import <nixpkgs>   :
pkgs.mkShell 
  buildInputs = with pkgs; [ cargo rustc pkg-config sqlite ];

如果您只在全局范围内安装了sqlite 和/或pkg-config,这可能是导致问题的原因。 pkg-config 派生设置了一些环境变量:

$ env | grep PKG_CONFIG
NIX_PKG_CONFIG_WRAPPER_TARGET_TARGET_x86_64_unknown_linux_gnu=1
PKG_CONFIG_FOR_TARGET=pkg-config

如果您使用全局安装的软件包,我认为这些都不会设置。

【讨论】:

谢谢。就是这样。我扩展了 Nix 文档 nixos.wiki/wiki/Rust 和 nixos.wiki/wiki/FAQ/…

以上是关于如何在 NixOS 和 cargo 下安装具有 sqlite 支持的diesel-cli?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 configuration.nix 中以声明方式添加 NixOS 不稳定通道

如何在保留 GNOME 的其余部分的同时从我的 NixOS 中删除 Epiphany?

Rust: Cargo 使用本地 crate

如何在 NixOS 上使用新的 haskell-ng 基础架构?

如何提供 C 库以在 NixOS 上堆叠?

如何在我的 Cargo.toml 中启用 --gc-targets?