4

运行 ruby​​-install 时,它无法构建。这也在 rbenv 问题(https://github.com/rbenv/ruby-build/issues/1725)中报告。

例如在安装 ruby​​ 2.6.8 时

# installing via ruby-install ( https://github.com/postmodern/ruby-install )
ruby-install ruby 2.6.8

它导致以下错误

ossl_x509store.c:452:30: note: ')' token is here
    result = rb_funcall(ctx, rb_intern("verify"), 0);
                             ^~~~~~~~~~~~~~~~~~~
../.././include/ruby/ruby.h:1826:56: note: expanded from macro 'rb_intern'
        __extension__ (RUBY_CONST_ID_CACHE((ID), (str))) : \
                                                       ^
../.././include/ruby/ruby.h:2602:20: note: expanded from macro 'rb_funcall'
        rb_funcallv(recv, mid, \
                          ^~~
6 warnings generated.
linking shared-object openssl.bundle
installing default openssl libraries
make[2]: Leaving directory '/Users/xxxxx/src/ruby-2.6.8/ext/openssl'
make[2]: Entering directory '/Users/xxxxx/src/ruby-2.6.8/ext/ripper'
extracting ripper.y from ../.././parse.y
compiling compiler ripper.y
ripper.y:762.9-16: syntax error, unexpected identifier, expecting string
make[2]: *** [Makefile:332: ripper.c] Error 1
make[2]: Leaving directory '/Users/xxxxx/src/ruby-2.6.8/ext/ripper'
make[1]: *** [exts.mk:257: ext/ripper/all] Error 2
make[1]: Leaving directory '/Users/xxxxx/src/ruby-2.6.8'
make: *** [uncommon.mk:286: build-ext] Error 2
!!! Compiling ruby 2.6.8 failed!
4

4 回答 4

4

当我运行以下命令时,我遇到了同样的问题ruby-install ruby 2.6.8 -- --with-openssl-dir=$(brew --prefix openssl@1.1)

我更新bisonbrew install bison@2.7运行export PATH="$(brew --prefix bison@2.7)/bin:$PATH"修复开膛手。然后,重新运行最初的 ruby​​ 命令就可以了!

于 2021-10-05T19:22:38.387 回答
3

似乎是编译器问题。首先确保正确安装了xcode。就我而言,我之前已经安装了它,但您可以选择重新安装以确保。希望这可以帮助人们节省试图找出问题的时间,因为编译需要几分钟。

# check xcode, should yield : /Library/Developer/CommandLineTools
xcode-select -p

# check xcode, should yield : xcode-select version 2384
xcode-select -v

# install xcode-select
xcode-select --install

# reinstall openssl and version 3
brew reinstall openssl@1.1

# install build dependancies
brew install openssl readline libyaml zlib bison bison@2.7

# ensure build is using bison
export PATH="$(brew --prefix bison@2.7)/bin:$PATH"

# set ruby compilation flags
export CFLAGS="-Wno-error=implicit-function-declaration"
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1) --with-readline-dir=$(brew --prefix readline) --with-libyaml-dir=$(brew --prefix libyaml) --with-zlib-dir=$(brew --prefix zlib)"

# install ruby via ruby-install
ruby-install ruby 2.6.8
于 2021-09-30T14:46:48.650 回答
0

我无法通过在 Big Sur 上编译来安装任何 rubies。我明白了:

In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Security.framework/Headers/AuthSession.h:32,
                 from /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Security.framework/Headers/Security.h:42,
                 from random.c:342:
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Security.framework/Headers/Authorization.h:193:14: error: variably modified 'bytes' at file scope
  193 |         char bytes[kAuthorizationExternalFormLength];
      |              ^~~~~
make: *** [random.o] Error 1
!!! Compiling ruby 2.7.4 failed!

这是我在 ruby​​-install 上的设置:

xcode-选择版本 2384

BASERUBY = /usr/local/opt/ruby@2.7/bin/ruby --disable=gems
CC = gcc
LD = ld
LDSHARED = gcc -dynamiclib
CFLAGS = -O2 -fno-tree-dce -fno-optimize-sibling-calls -Wno-error=implicit-function-declaration -pipe
XCFLAGS = -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -fPIE -DCANONICALIZATION_FOR_MATHN -I. -I.ext/include/x86_64-darwin20 -I./include -I. -I./enc/unicode/12.1.0
CPPFLAGS = -I/usr/local/opt/llvm/include -I/usr/local/opt/openssl@1.1/include -I/usr/local/opt/readline/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/gdbm/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT
DLDFLAGS = -L/usr/local/opt/bison/lib -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -L/usr/local/opt/openssl@1.1/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/gdbm/lib -fstack-protector-strong -pie -framework Security -framework Foundation
SOLIBS = -lpthread -ldl -lobjc
LANG = en_US.UTF-8
LC_ALL =
LC_CTYPE =
MFLAGS =

gcc(自制 GCC 11.2.0)11.2.0

于 2021-10-05T13:15:33.167 回答
0

我的同事用下面的脚本帮助我解决了这个问题:

#!/usr/bin/env bash

set -e

# ruby-install --latest

OPENSSL_VERSION=1.1
OPENSSL_DIR=/usr/local/opt/openssl@${OPENSSL_VERSION}

function install-ruby-on-mac() {
    PKG_CONFIG_PATH=${OPENSSL_DIR}/lib/pkgconfig \
    ruby-install $(ruby-install-options $1) \
        ruby $1 \
        -- \
        --with-openssl-dir=${OPENSSL_DIR} \
        --with-opt-dir=$(brew --prefix readline) \
        --without-tcl --without-tk
}

install-ruby-on-mac 2.5.8
install-ruby-on-mac 2.6.8
install-ruby-on-mac 2.7.4

希望它可以帮助某人。

于 2021-12-03T14:58:56.527 回答