我正在尝试在树莓派 4 上安装 ruby 3.2.2。我使用 GitHub 存储库、git 克隆方法遵循了所有步骤,但是当我到达
rbenv install 3.2.2
时,我得到了我认为是 ARM 相关错误的信息说道:
日志
pi@raspberrypi:~ $ rbenv install 3.2.2
To follow progress, use 'tail -f /tmp/ruby-build.20230804022323.9672.log' or pass --verbose
Downloading ruby-3.2.2.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.2.tar.gz
Installing ruby-3.2.2...
BUILD FAILED (Raspbian 11 using ruby-build 20230717-7-gf170c16)
Inspect or clean up the working tree at /tmp/ruby-build.20230804022323.9672.8D2OlO
Results logged to /tmp/ruby-build.20230804022323.9672.log
Last 10 log lines:
coroutine/arm64/Context.S:56: Error: bad instruction `ldp x21,x22,[sp,0x50]'
coroutine/arm64/Context.S:57: Error: bad instruction `ldp x23,x24,[sp,0x60]'
coroutine/arm64/Context.S:58: Error: bad instruction `ldp x25,x26,[sp,0x70]'
coroutine/arm64/Context.S:59: Error: bad instruction `ldp x27,x28,[sp,0x80]'
coroutine/arm64/Context.S:60: Error: bad instruction `ldp x29,x30,[sp,0x90]'
coroutine/arm64/Context.S:63: Error: ARM register expected -- `ldr x4,[sp,0xa0]'
coroutine/arm64/Context.S:66: Error: shift expression expected -- `add sp,sp,0xb0'
coroutine/arm64/Context.S:69: Error: bad instruction `ret x4'
make: *** [Makefile:468: coroutine/arm64/Context.o] Error 1
make: *** Waiting for unfinished jobs....
我发现这与尝试在aarch64(我正在使用的)上安装armv7有关。所以我查了一些相关的东西并得到了这个信息:
用户构建
pi@raspberrypi:~ $ uname -m
aarch64
工具链
pi@raspberrypi:~ $ gcc -v
...
Target: arm-linux-gnueabihf
...
确保工具链在我的
system path
中
pi@raspberrypi:~ $ which arm-linux-gnueabihf-gcc
/usr/bin/arm-linux-gnueabihf-gcc
确认这些信息后,我尝试像这样安装它:
pi@raspberrypi1:~ $ CC=arm-linux-gnueabihf-gcc rbenv install 3.2.2
To follow progress, use 'tail -f /tmp/ruby-build.20230804035531.14026.log' or pass --verbose
Downloading ruby-3.2.2.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.2.tar.gz
Installing ruby-3.2.2...
BUILD FAILED (Raspbian 11 using ruby-build 20230717-7-gf170c16)
Inspect or clean up the working tree at /tmp/ruby-build.20230804035531.14026.Mf7gAz
Results logged to /tmp/ruby-build.20230804035531.14026.log
Last 10 log lines:
coroutine/arm64/Context.S:56: Error: bad instruction `ldp x21,x22,[sp,0x50]'
coroutine/arm64/Context.S:57: Error: bad instruction `ldp x23,x24,[sp,0x60]'
coroutine/arm64/Context.S:58: Error: bad instruction `ldp x25,x26,[sp,0x70]'
coroutine/arm64/Context.S:59: Error: bad instruction `ldp x27,x28,[sp,0x80]'
coroutine/arm64/Context.S:60: Error: bad instruction `ldp x29,x30,[sp,0x90]'
coroutine/arm64/Context.S:63: Error: ARM register expected -- `ldr x4,[sp,0xa0]'
coroutine/arm64/Context.S:66: Error: shift expression expected -- `add sp,sp,0xb0'
coroutine/arm64/Context.S:69: Error: bad instruction `ret x4'
make: *** [Makefile:468: coroutine/arm64/Context.o] Error 1
make: *** Waiting for unfinished jobs....
失败后,我尝试了另一种方法:
pi@raspberrypi:~ $ export CC=arm-linux-gnueabihf-gcc
pi@raspberrypi:~ $ rbenv install 3.2.2
To follow progress, use 'tail -f /tmp/ruby-build.20230804040854.7501.log' or pass --verbose
Downloading ruby-3.2.2.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.2.tar.gz
Installing ruby-3.2.2...
BUILD FAILED (Raspbian 11 using ruby-build 20230717-7-gf170c16)
Inspect or clean up the working tree at /tmp/ruby-build.20230804040854.7501.FKpHuL
Results logged to /tmp/ruby-build.20230804040854.7501.log
Last 10 log lines:
coroutine/arm64/Context.S:56: Error: bad instruction `ldp x21,x22,[sp,0x50]'
coroutine/arm64/Context.S:57: Error: bad instruction `ldp x23,x24,[sp,0x60]'
coroutine/arm64/Context.S:58: Error: bad instruction `ldp x25,x26,[sp,0x70]'
coroutine/arm64/Context.S:59: Error: bad instruction `ldp x27,x28,[sp,0x80]'
coroutine/arm64/Context.S:60: Error: bad instruction `ldp x29,x30,[sp,0x90]'
coroutine/arm64/Context.S:63: Error: ARM register expected -- `ldr x4,[sp,0xa0]'
coroutine/arm64/Context.S:66: Error: shift expression expected -- `add sp,sp,0xb0'
coroutine/arm64/Context.S:69: Error: bad instruction `ret x4'
make: *** [Makefile:468: coroutine/arm64/Context.o] Error 1
make: *** Waiting for unfinished jobs....
这也失败了,现在我不知道如何使用 rbenv 安装 ruby。
您可能在 64 位内核上运行 32 位用户区,并且构建脚本从
uname -a
选择了错误的架构。将 arch 明确设置为 32 位可以使构建脚本选择正确的。
setarch armv7l bash # child shell now reports 32bit arch
rbenv install 3.2.2 # in the child shell
仅安装本身需要显式拱形设置。