【问题标题】:How to install and run ffi on M1 Mac如何在 M1 Mac 上安装和运行 ffi
【发布时间】:2022-11-11 06:58:13
【问题描述】:

我正在使用'ffi','〜> 1.9',

当我尝试运行我的 rails 项目时出现此错误

rake aborted!
LoadError: dlopen(/Users/kanye.west/.rbenv/versions/2.6.9/lib/ruby/gems/2.6.0/gems/ffi-1.9.25/lib/ffi_c.bundle, 0x0009): tried: '/Users/kanye.west/.rbenv/versions/2.6.9/lib/ruby/gems/2.6.0/gems/ffi-1.9.25/lib/ffi_c.bundle' (mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e))) - /Users/kanye.west/.rbenv/versions/2.6.9/lib/ruby/gems/2.6.0/gems/ffi-1.9.25/lib/ffi_c.bundle
/Users/kanye.west/dev/anenta/config/application.rb:14:in `<top (required)>'
/Users/kanye.west/dev/anenta/Rakefile:5:in `require'
/Users/kanye.west/dev/anenta/Rakefile:5:in `<top (required)>'
/Users/kanye.west/.rbenv/versions/2.6.9/bin/bundle:23:in `load'
/Users/kanye.west/.rbenv/versions/2.6.9/bin/bundle:23:in `<main>'

Caused by:
LoadError: cannot load such file -- 2.6/ffi_c
/Users/kanye.west/dev/anenta/config/application.rb:14:in `<top (required)>'
/Users/kanye.west/dev/anenta/Rakefile:5:in `require'
/Users/kanye.west/dev/anenta/Rakefile:5:in `<top (required)>'
/Users/kanye.west/.rbenv/versions/2.6.9/bin/bundle:23:in `load'
/Users/kanye.west/.rbenv/versions/2.6.9/bin/bundle:23:in `<main>'
(See full trace by running task with --trace)

尝试的方法

gem install --user-install ffi -v '1.9.25' -- --enable-libffi-alloc

gem install ffi -v '1.9.25' -- --with-cflags="-Wno-error=implicit-function-declaration"

gem install ffi -v '1.9.25' --platform=rub

alias gem="arch -x86_64 sudo gem"

CFLAGS="-Wno-error=implicit-function-declaration" RUBY_CONFIGURE_OPTS='--with-readline-dir=/opt/homebrew/opt/readline' gem install ffi -v '1.9.25' -- --with-cflags="-Wno-error=implicit-function-declaration"

【问题讨论】:

    标签: ruby-on-rails ruby apple-m1 ffi


    【解决方案1】:

    您需要使用自制软件安装libffi

    brew install libffi
    

    然后安装应该成功:

    gem install ffi
    

    我已经在我的 m1 上的 ruby​​ 2.7.2 上对此进行了测试。

    还要确保 libffi 和 ruby​​/gem 都在相同的架构上运行。您可能混合了一些 arm64 和 x86 二进制文件,从长远来看会导致大量编译器错误。如果遇到“错误的架构”错误,请尝试在 arm/m1 上重新安装 ruby​​/homebrew。

    以供参考: 我正在使用通过自制软件安装的 chruby,并通过 ruby-install 安装了 ruby​​ 2.7.2。 homebrew 和 ruby​​ 都没有使用 Rosetta 仿真,而是在 arm64 上编译。我已经使用brew install 安装了libffi,然后使用gem install 安装了ffi,没有问题。

    pascal@0xc0fefe ~> which ruby
    /Users/pascal/.rubies/ruby-2.7.2/bin/ruby
    
    pascal@0xc0fefe ~> which ruby-install
    /opt/homebrew/bin/ruby-install
    
    pascal@0xc0fefe ~> file /Users/pascal/.rubies/ruby-2.7.2/bin/ruby
    /Users/pascal/.rubies/ruby-2.7.2/bin/ruby: Mach-O 64-bit executable arm64
    
    pascal@0xc0fefe ~> gem install ffi
    Building native extensions. This could take a while...
    Successfully installed ffi-1.15.5
    Parsing documentation for ffi-1.15.5
    Done installing documentation for ffi after 0 seconds
    1 gem installed
    

    【讨论】:

    • 这对我不起作用我认为 brew 的基本架构正在爆炸我的终端
    • 您是否使用 arm 或 intel 安装了 brew?我在 m1 上运行 homebrew 和 ruby​​ 没有任何问题,并且还安装了 ffi。您是否为终端或自制软件启用了 Rosetta 仿真?
    • 第二部分,rosetta 仿真和重新安装自制 ruby​​ 环境和架构是解决我的问题的原因。
    【解决方案2】:

    这是我发现唯一可行的解​​决方法,下载 Rosette,https://support.apple.com/en-us/HT211861,然后卸载(您需要这样做才能与当前架构不兼容):

    • 红宝石版本
    • 自制
    • rbenv

    并在终端上选择Get Info,然后检查Open using Rosetta

    现在重新安装

    • 自制
    • rbenv
    • 红宝石 运行ruby -v 检查并验证您的版本是否有... [universal.x86_64-darwin21]

    【讨论】:

      【解决方案3】:

      问题是在ffi v 1.14.0 中添加了对M1 的官方支持,所以尝试更新到那个版本,应该不会破坏任何东西。

      gem uninstall ffi
      

      并在Gemfile.lock 中手动更改为 1.14.0。

      gem install ffi -v '1.14.0'
      

      这对我有用。

      【讨论】:

        猜你喜欢
        • 2021-08-08
        • 1970-01-01
        • 2022-06-11
        • 2022-08-02
        • 1970-01-01
        • 2021-05-17
        • 2021-06-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多