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

How to install diesel-cli with sqlite support under NixOS and cargo?

当我尝试使用

安装 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.

中看到任何要启用的标志

注:

  1. 安装 postgres nix 包并使用
  2. 编译 diesel-cli
cargo install diesel_cli --no-default-features --features postgres

完美运行。

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

编译似乎可以使用以下 shell.nix:

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

如果您只全局安装 sqlite and/or 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

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