如何在 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 软件包 sqlite
和 pkg-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
的变通方法是使用同名 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
如果您使用全局安装的软件包,我认为这些不会被设置。
当我尝试使用
安装 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 软件包 sqlite
和 pkg-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
的变通方法是使用同名 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
如果您使用全局安装的软件包,我认为这些不会被设置。