GCC-4.9 не в состоянии сделать Ruby 2.1.1 с Rbenv в OS X 10.9.2

0

Я не в своей глубине, потому что я не знаю, что такое о C и такие компиляторы, за исключением того, что я читал - у меня есть доморощенный gcc-4.9, связанный с ним, и в моем.bash_profile есть cc = gcc-4.9 - надеясь, что это позволит мне установить Ruby 2.1.1, поскольку предыдущие попытки не удались, жалуясь на следующее:

note: unrestricted unions only available with -std=c++11 or -std=gnu++11

Я посетил сайт gcc и увидел, что 4.9 включает поддержку С++ 11, поэтому я смущен тем, почему он не смог сделать Ruby в соответствии с приведенной выше ошибкой, и полный вывод ошибок ниже:

 make
CC = /usr/local/bin/g++-4.9
LD = ld
LDSHARED = /usr/local/bin/g++-4.9 -dynamic -bundle
CFLAGS = -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings   -pipe 
XCFLAGS = -D_FORTIFY_SOURCE=2 -fstack-protector -fno-strict-overflow -fvisibility=hidden -DRUBY_EXPORT -fPIE
CPPFLAGS = -I/usr/local/Cellar/openssl/1.0.1g/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT   -I. -I.ext/include/x86_64-darwin13.0 -I./include -I.
DLDFLAGS = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -L/usr/local/Cellar/openssl/1.0.1g/lib  -fstack-protector -Wl,-u,_objc_msgSend -pie -framework CoreFoundation  
SOLIBS = -lgmp 
Using built-in specs.
COLLECT_GCC=/usr/local/bin/g++-4.9
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc49/4.9.0/libexec/gcc/x86_64-apple-darwin13.1.0/4.9.0/lto-wrapper
Target: x86_64-apple-darwin13.1.0
Configured with: ../configure --build=x86_64-apple-darwin13.1.0 --prefix=/usr/local/Cellar/gcc49/4.9.0 --enable-languages=c,c++,objc,obj-c++ --program-suffix=-4.9 --with-gmp=/usr/local/opt/gmp4 --with-mpfr=/usr/local/opt/mpfr2 --with-mpc=/usr/local/opt/libmpc08 --with-cloog=/usr/local/opt/cloog018 --with-isl=/usr/local/opt/isl011 --with-system-zlib --enable-version-specific-runtime-libs --enable-libstdcxx-time=yes --enable-stage1-checking --enable-checking=release --enable-lto --disable-werror --enable-plugin --disable-nls --enable-multilib
Thread model: posix
gcc version 4.9.0 (GCC) 
compiling miniprelude.c
In file included from vm_core.h:24:0,
             from miniprelude.c:8:
method.h:84:19: error: member 'rb_method_attr_t rb_method_definition_struct::<anonymous union>::attr' with copy assignment operator not allowed in union
rb_method_attr_t attr;
               ^
method.h:84:19: note: unrestricted unions only available with -std=c++11 or -std=gnu++11
In file included from miniprelude.c:8:0:
vm_core.h:674:59: error: use of enum 'iseq_type' without previous declaration
VALUE rb_iseq_new(NODE*, VALUE, VALUE, VALUE, VALUE, enum iseq_type);
                                                       ^
vm_core.h:677:76: error: use of enum 'iseq_type' without previous declaration
VALUE rb_iseq_new_with_bopt(NODE*, VALUE, VALUE, VALUE, VALUE, VALUE, enum iseq_type,     VALUE);
                                                                        ^
vm_core.h:678:75: error: use of enum 'iseq_type' without previous declaration
VALUE rb_iseq_new_with_opt(NODE*, VALUE, VALUE, VALUE, VALUE, VALUE, enum iseq_type, const rb_compile_option_t*);
                                                                       ^
make: *** [miniprelude.o] Error 1

Как я уже писал, я действительно не в своей глубине, поэтому буду признателен за любую помощь в разрешении этого, чтобы я смог установить Ruby 2.1.1.

Используется моя команда. /configure:

./configure --prefix="$HOME/.rbenv/versions/2.1.1" --with-opt-dir=/usr/local/Cellar/openssl/1.0.1g

Я установил Rbenv через homebrew, поэтому он не находится в ~./Rbenv, но в моем PATH и sym, связанном с homebrew:

/usr/local/bin/rbenv -> ../Cellar/rbenv/0.4.0/bin/rbenv

Я не вижу никаких жалоб на это, что заставляет меня думать, что я, возможно, использую неправильный C-компилятор, но я не вижу других с теми же ошибками, и они довольны homebrew gcc-4.9 или apple-gcc42, но, честно говоря, я понятия не имею, как определить, что использовать.

Любая помощь была оценена, поскольку я слишком долго тратил на это деньги, а не фактически разрабатывал веб-приложение.

благодаря

  • 0
    Почему он пытается использовать g ++?
  • 0
    Почему вы пытаетесь использовать GCC вообще? Просто используйте лязг.
Теги:
compiler-construction
rbenv
gcc4.9

1 ответ

0

Сообщение об ошибке

 note: unrestricted unions only available with -std=c++11 or -std=gnu++11

говорит, что доступна какая-то функция, только когда gcc (или g++) запущен с опциями -std=c++11 или -std=gnu++11

Таким образом, gcc 4.9 включает поддержку С++ 11, но не позволяет ее по умолчанию. Добавьте параметр командной строки -std=c++11 чтобы включить поддержку. Такие параметры обычно включаются в переменную CFLAGS. Или вы даже можете добавить это в свой CC.

Я думаю, что может быть ошибка в скрипте configure Ruby. Этот скрипт должен проверять все необходимые функции и готовить правильный набор флагов CFLAGS, но в вашем случае ему не удалось добавить -std=c++11 в флаги.

  • 0
    Я подозреваю, что сборка должна использовать gcc, а не g ++. Насколько я знаю, Ruby написан на C.
  • 0
    @osgx: Спасибо, я должен был упомянуть, что уже пытался установить gcc49 с помощью: brew install gcc49 --enable-languages = c, c ++, c ++ 11, но это не помогло. Итак, я сделал это неправильно? Должен ли я переустановить его так? brew install gcc49 --enable-languages = std = c ++ 11? Извините, я здесь не в себе.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню