在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));
答案 0 :(得分:1)
我已经能够以 x86_64 代码和 3.0.1 作为 arm64 代码安装。我使用 rvm,但这应该适用于其他事情。
我有 2 个版本的 Homebrew。一个在 /opt/homebrew/bin/brew 中,另一个在 /usr/local/bin/brew 中。
我的 .zshrc 配置文件中有 2 组导出。我使用架构为 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 中编译 2.6.6(我假设是 2.7.2),在 arm64 shell 中分别编译 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 我有时仍然无法让 Rails 正确链接到 mysql。 ruby / rails / mysql 似乎都必须是相同的架构。仍在追逐那个。
答案 1 :(得分:1)
我终于通过以下步骤在 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 权限。