![](/img/trans.png)
[英]ruby-install fails when installing ruby 2.6.x and 3.0.x on mac osx 11.6
[英]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 但這應該適用於其他事情。
我有 2 個版本的 Homebrew。 一個在 /opt/homebrew/bin/brew 中,另一個在 /usr/local/bin/brew 中。
我在 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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.