NixOS 上的 Ruby — 构建本机扩展时 FFI Gem 安装失败

NixOS 上的 Ruby — 构建本机扩展时 FFI Gem 安装失败

我是多年的 Ruby 爱好者。我无法确定缺少什么来阻止 FFI 安装。

这是文件中的错误make.out(一定喜欢这个名字):

make[3]: *** [Makefile:1048: libffi_convenience.la] Error 1
make[3]: Leaving directory '/home/dw/.gem/ruby/2.4.0/gems/ffi-1.9.23/ext/ffi_c/libffi-x86_64-linux'
make[2]: *** [Makefile:1309: all-recursive] Error 1
make[2]: Leaving directory '/home/dw/.gem/ruby/2.4.0/gems/ffi-1.9.23/ext/ffi_c/libffi-x86_64-linux'
make[1]: *** [Makefile:617: all] Error 2
make[1]: Leaving directory '/home/dw/.gem/ruby/2.4.0/gems/ffi-1.9.23/ext/ffi_c/libffi-x86_64-linux'
make: *** [libffi.mk:9: "/home/dw/.gem/ruby/2.4.0/gems/ffi-1.9.23/ext/ffi_c/libffi-x86_64-linux"/.libs/libffi_convenience.a] Error 2

make failed, exit code 2

我检查了 nixpkgs 并看到libffi-3.2.1可以pure-ffi-0.14使用。我两个都安装了。我仍然收到错误。

答案1

第一个选项是使用邦迪克斯。它使用全局覆盖文件来注入系统依赖项:https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/ruby-modules/gem-config/default.nix

最重要的宝石应该在那里找到,包括菲菲gem,您正在尝试安装。

如果您不想/不能使用 bundix,替代方案是 nix-shell,它为您提供正确的构建环境。

对于 ffi gem,您还可以从 nixpkgs 的 gem-config 借用代码:

with import <nixpkgs> {};
stdenv.mkDerivation {
  name = "env";
  buildInputs = [
    ffi pkgconfig
  ];
}

nix-shell然后在项目中运行就可以了。此步骤也可以使用 direnv 的 nix 支持自动化。安装ffivianix-env不起作用,因为它没有设置 ffi gem 在编译期间找到正确的标头/库所需的NIX_CFLAGS_COMPILE和变量。NIX_LDFLAGS

相关内容