在Mac M1上使用ruby-install安装ruby会导致编译错误

1dkrff03  于 2023-08-04  发布在  Ruby
关注(0)|答案(7)|浏览(482)

在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));

字符串

yzckvree

yzckvree1#

我终于在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权限。

rlcwz9us

rlcwz9us2#

这对我很有效:

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

字符串
所以我必须指定架构(arch -x86_64)和/usr/local/opt下的openssl版本。在我的例子中,我已经安装了几个版本的openssl,我只是选择了最新的。在其他情况下,您可能需要自己下载并编译它

t8e9dugd

t8e9dugd3#

我已经能够安装作为x86_64代码和3.0.1作为arm 64代码。我使用rvm,但这应该与其他事情。
1.我使用iTerm 2并制作了2份副本。一个是我使用Get Info将一个应用程序更改为使用Rosetta。在某个地方,我甚至发现了一个蓝色图标的x86应用程序。
x1c 0d1x的数据
1.我有两个版本的Homebrew。一个在/opt/homebrew/bin/brew,另一个在/usr/local/bin/brew。
1.我有2套出口在我的.zshrc配置文件。我使用体系结构为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),并在arm 64 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似乎都必须是相同的架构。还在追查

t9eec4r0

t9eec4r04#

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

06odsfpq

06odsfpq5#

对于M1用户,架构为arm64。启用Rosetta后,默认为x86_64,这会导致兼容性问题。使用rvm install命令内联添加arch:

arch -arm64 rvm install "ruby-2.7.5"

字符串

vc6uscn9

vc6uscn96#

复制终端并命名它的东西我把终端罗斯
终端设备>右键单击>获取信息>使用Rosetta检查打开
Open Terminal Ros > Run install "ruby-2.7.2"
然后运行rvm use 2.7.2 --default


的数据

ua4mk5z4

ua4mk5z47#

这就是M1的工作原理。我有Rosetta 2。
1.确保你有最新的rbenv,openssl,readline,libyaml和ruby-build
最后运行以下命令:

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 -arm64 rbenv install --verbose 3.0.6

字符串

相关问题