Github 页面安装:Jekyll -v 输出 `require': 无法加载此类文件 -- google/protobuf_c (LoadError)

Pen*_*uin 6 ruby protocol-buffers jekyll github-pages

我正在尝试按照本指南设置 GitHub 页面网站我按照jekyllrb.com 教程安装了 Homebrew、chruby 和 Jekyll 。

当我跑步时,ruby -v我得到了ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin18]。当我跑步时,chruby -V我得到了chruby: 0.3.9。安装 Jekyll 后,gem install jekyll我得到了Successfully installed jekyll-4.3.1 Parsing documentation for jekyll-4.3.1 Done installing documentation for Jekyll after 0 seconds 1 gem installed.

但是当我运行jekyll -v(或任何Jekyll命令)时,我收到一条很长的消息,其中包含以下错误:

<internal:/Users/my_username/.rubies/ruby-3.1.2/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require': dlopen(/Users/my_username/.gem/ruby/3.1.2/gems/google-protobuf-3.21.12-x86_64-darwin/lib/google/3.1/protobuf_c.bundle, 9): no suitable image found.  Did find: (LoadError)
    /Users/my_username/.gem/ruby/3.1.2/gems/google-protobuf-3.21.12-x86_64-darwin/lib/google/3.1/protobuf_c.bundle: cannot load 'protobuf_c.bundle' (load command 0x80000034 is unknown)
    /Users/my_username/.gem/ruby/3.1.2/gems/google-protobuf-3.21.12-x86_64-darwin/lib/google/3.1/protobuf_c.bundle: cannot load 'protobuf_c.bundle' (load command 0x80000034 is unknown) - /Users/my_username/.gem/ruby/3.1.2/gems/google-protobuf-3.21.12-x86_64-darwin/lib/google/3.1/protobuf_c.bundle
Run Code Online (Sandbox Code Playgroud)

我花了几个小时研究这个错误的含义,并发现了非常具体的(对于某些版本的 Ruby 或其他库)问题,例如Ruby 2.7.2 google/protobuf_c Problem (M1)Ruby: Gem version 3.11.2 does not load on Ruby 2.7等等。

这是我第一次听说 Ruby 或 Jekyll 或其他任何东西,我不知道如何正确安装这些来在 GitHub 上创建一个网站。我还尝试使用rvm安装 Ruby ,但chruby出现了相同的错误。我还尝试安装不同版本的 Ruby,例如3.1.33.2.0

ano*_*rmh 5

当 gem 具有需要编译的本机扩展时,gem 作者可以提前构建扩展并将它们包含在包中,以便与从头开始编译相比,gem 的安装速度更快。不幸的是谷歌已经多次破坏了这个实现。

这个问题已经困扰 google-protobuf 大约两年了。谷歌定期修复它并再次破坏它。他们还定期声称自己了解了问题,但实际上并没有理解问题,并声称已经解决了问题,但没有解决问题。当他们是唯一能够解决问题的人时,他们的 GitHub 问题经常会推卸责任。

每当您在 macOS 上处理 google-protobuf 时,最好确保从头开始编译它。这可以通过参数来完成--platform

gem install --platform ruby google-protobuf
Run Code Online (Sandbox Code Playgroud)

该平台ruby意味着不使用任何预编译的二进制文件并强制从源代码编译

该平台x86_64-darwin意味着使用适用于配备 Intel 处理器的 macOS 的预编译二进制文件。这是 gem 安装程序为您的系统识别并自动使用的版本,但错误no suitable image found是 macOS 错误,这意味着该库没有以我可以理解的方式编译

  • 谢谢,就我而言,在“sudo gem install google-protobuf -v 3.21 --platform=ruby”之前,“sudo gem uninstall google-protobuf”是必要的,其中“-v 3.21”是 jekyll 4.3.1 所需的版本。 (4认同)
  • 几乎在任何情况下“gem”都不应该与 sudo 一起运行。我将这条评论留给未来的读者;一般来说,如果您使用“sudo gem”,那么您就做错了,并且在尝试之前应该确保您知道必须使用“sudo”的原因。 (3认同)