簡體   English   中英

使用 ruby-install 安裝 ruby 會導致 Mac M1 出現錯誤

[英]Installing ruby with ruby-install causes error out on Mac M1

在mac M1上使用ruby-install安裝ruby 2.6.6或2.7.2時出現如下錯誤。 Ruby 3.0.0 工作正常,但任何舊版本都會因 readline 而出錯,並且不允許安裝 ruby。

readline.c:1905:37: error: use of undeclared identifier 'username_completion_function'; did you mean 'rl_username_completion_function'?
                                    rl_username_completion_function);
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                    rl_username_completion_function
readline.c:79:42: note: expanded from macro 'rl_username_completion_function'
# define rl_username_completion_function username_completion_function
                                         ^
/opt/homebrew/opt/readline/include/readline/readline.h:485:14: note: 'rl_username_completion_function' declared here
extern char *rl_username_completion_function PARAMS((const char *, int));

您可以使用 Rbenv RUBY_CFLAGS="-w" rbenv install 2.6.6

我已經能夠安裝為 x86_64 代碼和 3.0.1 作為 arm64 代碼。 我使用 rvm 但這應該適用於其他事情。

  1. 我使用 iTerm2 並制作了 2 個副本。 一個我使用 Get Info 將一個應用程序更改為使用 Rosetta。 我什至在某個地方找到了 x86 應用程序的藍色圖標。

在此處輸入圖像描述

  1. 我有 2 個版本的 Homebrew。 一個在 /opt/homebrew/bin/brew 中,另一個在 /usr/local/bin/brew 中。

  2. 我在 my.zshrc 配置文件中有 2 組導出。 我使用 select 的架構,正確的是 shell。

alias abrew="/opt/homebrew/bin/brew"

alias i="arch -x86_64"
alias ibrew="arch -x86_64  /usr/local/bin/brew"
alias irvm="arch -x86_64 rvm"

# Add RVM to PATH for scripting. Make sure this is the last PATH variable change.
export PATH="$PATH:$HOME/.rvm/bin"

_ARCH=$(arch)
PROMPT="$_ARCH $PROMPT"

# Requires iterm2
if [[ "$_ARCH" == "i386" ]]; then
  echo -ne "\033]1337;SetColors=bg=000FC5\007"
  #usr/local is X_86
  export PATH="/usr/local/bin:$PATH"
  export PATH="/usr/local/opt:$PATH"
fi

if [[ "$_ARCH" == "arm64" ]]; then
  #usr/local is X_86
  export PATH="/opt/homebrew/bin:$PATH"
  export PATH="/opt/homebrew/opt:$PATH"
fi

有了這個,我可以在 x86 shell 和 arm64 Z2591C98B701244562481ZB1E 中分別編譯 2.6.6(我假設是 2.7.2)和 3.0.1

我的 rvm 列表如下所示:

   ruby-2.4.6 [ x86_64 ]
   ruby-2.4.9 [ x86_64 ]
 * ruby-2.6.5 [ x86_64 ]
   ruby-2.6.6 [ x86_64 ]
   ruby-2.7.0 [ x86_64 ]
   ruby-2.7.2 [ x86_64 ]
=> ruby-3.0.1 [ arm64 ]

PS 我有時仍然無法讓導軌正確鏈接到 mysql。 ruby / rails / mysql 似乎都必須是相同的架構。 還在追那個。

我終於在m1芯片macbook pro上安裝了舊版本的ruby,包括2.6.6,步驟如下:

首先,我必須重新安裝 rbenv、ruby-build 和 readline:

brew reinstall rbenv ruby-build readline

其次,使用CONFIGURE_OPTS破壞了我的 OpenSSL 構建。 請改用RUBY_CONFIGURE_OPTS 我正在使用 hombrew 並且必須使用以下標志:

RUBY_CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`"

第三,設置以下內容以允許 make 命令中的警告不停止構建:

RUBY_CFLAGS="-Wno-error=implicit-function-declaration"

第四,確保在通過 rbenv 安裝時設置了 arch 標志:

arch -x86_84

第五,確保您的自制程序路徑設置正確:

export PATH="/opt/homebrew/bin:$PATH"
export PATH="/opt/homebrew/opt:$PATH"

成功安裝 ruby 2.6.6 的最終命令是:

export PATH="/opt/homebrew/bin:$PATH"
export PATH="/opt/homebrew/opt:$PATH"
RUBY_CFLAGS="-Wno-error=implicit-function-declaration" RUBY_CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" sudo arch -x86_64 rbenv install --verbose 2.6.6

我使用 sudo 為腳本授予 mkdir 權限。

這對我有用:

❯ arch -x86_64 rvm install 3.1.2 --with-openssl-dir=/usr/local/opt/openssl@3

所以我必須在/usr/local/opt下指定架構( arch -x86_64 )和 openssl 的版本。 就我而言,我已經在那里安裝了幾個版本的 openssl,我只是選擇了我擁有的最新版本。 在其他情況下,您可能需要自己下載和編譯

對於 M1 用戶,架構是arm64 啟用 Rosetta 后,它默認為x86_64 ,這會導致兼容性問題。 使用 rvm install 命令內聯添加 arch:

arch -arm64 rvm install "ruby-2.7.5"

復制終端並將其命名為 Terminal Ros

終端 Ros > 右鍵單擊 > 獲取信息 > 檢查使用 Rosetta 打開

打開終端 Ros > 運行install "ruby-2.7.2"

然后運行rvm use 2.7.2 --default

羅塞塔終端

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM