"Gem install therubyracer -v '0.10.2'" trên osx mavericks không cài đặt


90

Đang cố gắng cài đặt therubyracer trên mavericks bằng cách sử dụng "gem install therubyracer -v '0.10.2'" nhưng tôi gặp lỗi sau:

/Users/dennischen/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for main() in -lobjc... yes
creating Makefile

make
compiling rr.cpp
clang: warning: argument unused during compilation: '-rdynamic'
rr.cpp:48:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
1 warning generated.
compiling v8.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_array.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_callbacks.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_context.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_date.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_debug.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_exception.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_exception.cpp:10:16: warning: unused variable 'stack' [-Wunused-variable]
  static void* stack[20];
               ^
1 warning generated.
compiling v8_external.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_external.cpp:10:9: warning: unused variable 'references' [-Wunused-variable]
  VALUE references;
        ^
1 warning generated.
compiling v8_function.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_handle.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_locker.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_locker.cpp:45:5: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
v8_locker.cpp:85:5: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
2 warnings generated.
compiling v8_message.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_object.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_object.cpp:77:19: warning: unused variable 'proto' [-Wunused-variable]
    Handle<Value> proto(rr_rb2v8(prototype));
                  ^
1 warning generated.
compiling v8_script.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_string.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_template.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_try_catch.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_v8.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_value.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_value.cpp:100:9: warning: unused function 'ToInt32' [-Wunused-function]
  VALUE ToInt32(VALUE self) {
        ^
1 warning generated.
compiling v8_weakref.cpp
clang: warning: argument unused during compilation: '-rdynamic'
linking shared-object v8.bundle
clang: error: no such file or directory: '/Users/dennischen/.rvm/gems/ruby-1.9.3-p194@panini/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a'
make: *** [v8.bundle] Error 1

bất cứ ai có thể giúp tôi tìm ra cách để có được đá quý này để làm việc? Tôi đã cài đặt các công cụ dòng lệnh.


Bạn có homebrewkhông? Hãy thử cài đặt v8 sử dụng brew install v8trước khi cài đặt đá quý
Ivan Shamatov

Tôi tin rằng cài đặt bia v8 là một vấn đề riêng biệt. Vui lòng xem stackoverflow.com/questions/11598655/therubyracer-install-error để biết chi tiết về v8 với brew.
Ash Blue

Câu trả lời:


242

Nếu bạn quyết định sử dụng therubyracerphiên bản đá quý mới hơn , bạn sẽ không còn gặp vấn đề này nữa

Nếu không thì:

brew tap homebrew/dupes # Thanks Tom
brew install apple-gcc42

export CC=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2
export CXX=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2
export CPP=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2

brew uninstall v8

gem uninstall libv8

gem install therubyracer -v '0.10.2' # specify version

11
Cách tiếp cận này dường như tốt hơn so với symlink sửa đổi
Nilesh

3
brew tap homebrew/dupessửa lỗi "Lỗi: Không có công thức khả dụng cho apple-gcc42"
TomFuertes

1
Điều này CUỐI CÙNG đã khắc phục sự cố cho tôi - cảm ơn! Tôi đã thử giải pháp liên kết biểu tượng của M. Scott Ford bên dưới và nó dường như hoạt động, nhưng gặp lỗi khi tôi thực sự cố gắng thực hiện bất kỳ điều gì (rake, rails, v.v.).
Kyle Fox

2
Cập nhật lên therubyracer 0.12.0 đã khắc phục sự cố này cho tôi.
jackocnr

6
Thật không may, không có giải pháp nào trong số này hoạt động với tôi trên OSX 10.9, ruby ​​2.1.0 và therubyracer 0.12.1.
turboladen

16

Vì vậy, cuối cùng tôi đã làm cho nó hoạt động sau một thời gian đấu tranh ... nhờ Simon và Alvaro.

Tuy nhiên, tôi có một điều cần bổ sung, việc sử dụng cờ --with-system-v8 không hoạt động với tôi ... Vì vậy, tôi đã xóa hệ thống v8 của mình bằng

brew uninstall v8

Và cuộc chạy

gem install libv8

Nếu bạn đã chạy gem install libv8với cờ hệ thống v8, hãy chắc chắn gỡ cài đặt phiên bản đá quý đó (thực hiện bằng cách chạy gem uninstall libv8). Điều quan trọng là bạn không nên sử dụng gói do brew cung cấp, nó dường như không hoạt động trong Mavericks (nó được cài đặt tốt và gói sẽ báo rằng gói của bạn đã hoàn tất, nhưng ứng dụng của bạn sẽ bị lỗi khi cố gắng sử dụng v8 ).

Để tóm tắt câu trả lời, tôi thực hiện những việc sau:

brew install apple-gcc42
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp

brew uninstall v8
gem install libv8
gem install therubyracer

2
Điều này đã làm việc cho tôi. Nhưng tôi đã liên kết biểu tượng gcc vào / usr / local / bin và khởi động lại thiết bị đầu cuối để tôi có thể xóa nó sau khi cài đặt libv8.
Jamon Holmgren

2
Liên kết mã nhị phân homebrew với phiên bản cụ thể đó, thành / usr / bin, là một ý tưởng thực sự tồi. Tiếp theo brew updateđi cùng và quay những con đường đó sẽ khiến bạn rơi vào trạng thái hỏng.
mrm

10

Tôi đã gặp vấn đề tương tự, điều này phù hợp với tôi:

therubyracer (0.10.2) & libv8 (3.3.10.4)

Đầu tiên:

  • brew install apple-gcc42
  • bạn phải liên kết tất cả các tập tin nhị phân của các trình biên dịch ( gcc, cpp, g++) để/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/<compiler>

Sau đó, bạn có thể thử điều này:

  • brew install v8
  • gem install libv8 -v '3.3.10.4' -- --with-system-v8
  • gem install therubyracer -v 'therubyracer'hoặc bundle installvào thư mục của dự án đường ray.

apple-gcc42: This formula either does not compile or function as expected on macOS MacOS của tôi là 10.12.6
Wylliam Judd

7

Tôi vừa gặp sự cố tương tự và một giải pháp hiện tại là sử dụng apple-gcc42 thay vì tiếng kêu để biên dịch cả đá quý:

brew install apple-gcc42

Và sau đó bạn có sự lựa chọn giữa thực hiện một số liên kết tượng trưng trong / usr / bin cho các tệp nhị phân {gcc, g ++, c ++}:

sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp

Trong thực tế g ++ là đủ.

Hoặc ... bạn có thể xuất các biến môi trường CC / CXX / CPP với các đường dẫn tương ứng với các tệp nhị phân được tạo bởi homebrew. Đó chắc chắn là một cách giải quyết tốt hơn.

Giải pháp thứ ba là tải xuống Xcode 4.6.3 và cài đặt nó trong thư mục Ứng dụng . Sau đó, nhập vào thiết bị đầu cuối:

sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer
gem install therubyracer

Khi gem đã được cài đặt, bạn có thể chuyển về Xcode 5.0:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

Làm cách nào để chuyển trình biên dịch sang apple-gcc42?
user2711889

@Simon khi tôi cố gắng mã hóa với trình biên dịch, tôi nhận được thông báo rằng tệp tồn tại. Đó có phải là tập tin clang không? Nếu tôi chạy cài đặt gói, nó có vẻ như không sử dụng gcc vì lỗi đầy tham chiếu clang.
isea

Nếu bạn đang sử dụng MacPorts, bạn không phải liên kết biểu tượng để trỏ đến một phiên bản GCC khác, có một lệnh nội trang cho điều đó (xem câu trả lời của tôi).
jshkol

6

Tôi đã tìm thấy một giải pháp thay thế hoạt động mà không cần cài đặt apple-gcc42.

Điều này sẽ hoạt động nếu thông báo lỗi bạn nhận được trông giống như sau:

clang: error: no such file or directory: '/Users/mscottford/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a'

Sau đó, bạn sẽ có thể làm như sau:

brew install v8
bundle install 
# after failing create link from brew installed v8 to error location
ln -s /usr/local/Cellar/v8/3.21.17/lib/libv8_base.x64.a /Users/mscottford/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a
bundle install

Nguồn: https://github.com/cowboyd/therubyracer/issues/277#issuecomment-27734348


+1 lớn cho cái này. Đá quý sẽ cài đặt trên CLI nhưng RubyMine v6 đã từ chối cài đặt nó ... việc thiết lập liên kết biểu tượng này đã giải quyết được vấn đề cuối cùng. Cảm ơn!
Ode

1
1000% này, chúc mừng @ M.ScottFord. Tôi sử dụng rvm và do đó câu lệnh ln của tôi là:ln -s /usr/local/Cellar/v8/3.21.17/lib/libv8_base.x64.a ~/.rvm/gems/ruby-1.9.3-p327/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a
Dave Foster

3

Như đã đề xuất trong nhiều câu trả lời, điều dễ dàng nhất để làm là biên dịch các phần mở rộng gốc của The Ruby Racer với Apple GCC 4.2 (thay vì phiên bản được cài đặt bằng Xcode).

Nếu đang sử dụng MacPorts, bạn không cần phải xử lý thủ công với việc thiết lập các liên kết tượng trưng cho các mã nhị phân GCC. Các port selectlệnh làm điều đó cho bạn. Nếu bạn chưa cập nhật MacPorts kể từ khi cài đặt Mavericks, hãy làm một sudo port selfupdate. Với MacPorts được cập nhật, hãy thử những cách sau:

# If you don't have it, install the port for Apple's GCC 4.2
sudo port install apple-gcc42 

    # OR

# If you had apple-gcc42 already (before Mavericks), update it
sudo port upgrade apple-gcc42


# Same result as manual symlinking of GCC in other answers
sudo port select gcc apple-gcc42 && hash -r

# Install therubyracer, will install libv8 gem dependency
#  *note* if you have any existing versions of these gems, remove them
gem install therubyracer

# Restore GCC to system default (optional)
sudo port select gcc none && hash -r

Nói chung, thủ tục này ( sudo port select gcc [version]) sẽ hoạt động bất cứ lúc nào bạn muốn sử dụng phiên bản GCC cụ thể thay vì phiên bản được cài đặt bởi Xcode (Apple LLVM v5 cho 10.9 Mavericks / Xcode 5).


1
Làm việc cho tôi trên mavericks.
Evo_x

3

Tôi quản lý để cài đặt therubyracer 0.12 và libv8 3.16.14.3 trên ruby ​​2.0.0p353 và os x 10.9

libv8 yêu cầu gcc42

brew install v8
brew install apple-gcc42
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp
gem install libv8

therubyracer yêu cầu gcc sau

brew install gcc49
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/gcc-4.9 /usr/bin/gcc
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/g++-4.9 /usr/bin/g++
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/cpp-4.9 /usr/bin/cpp

Gemfile

gem 'therubyracer', :require => 'v8', :platforms => :ruby

sử dụng bundlethay vìgem install therubyracer


Cảm ơn! Điều này cuối cùng đã vượt qua tôi bundle installsau nhiều ngày thử và sai. Chỉ có điều tôi đã làm khác là gỡ cài đặt tất cả các công cụ dành cho nhà phát triển đã được cài đặt brewcho đến khi gcc --versionđược báo cáo rằng đó là phiên bản Apple LLVM và được định cấu hình bằng Xcode, sau đó tôi di chuyển hiện có /usr/bin/gcc(và các cộng sự) ra ngoài trước khi mã hóa apple-gcc42 libs, sau đó thay vì cài đặt gcc49 (lần trước tôi đã thử nó đã chiếm quyền cấu hình của chúng tôi), tôi chỉ sao chép lại libs gcc, g ++ và cpp gốc. Cho rằng tôi đã thử 3 tá cách khác nhau để tìm ra cách phù hợp với mình, YMMV
Chris Bloom

3

Đây phải là một cách an toàn và sạch sẽ (không có liên kết tượng trưng) để cài đặt bộ lọc bụi cho bất kỳ ai gặp sự cố.

Được lấy từ: gem install therubyracer -v 0.11.4 không thành công trên OS X 10.10

cài đặt Xcode (nếu bạn chưa có một trong các phiên bản này) 6.1.1, 6.2-beta hoặc 6.3-beta và (cần có phiên bản này) 4.6.3

gem uninstall libv8 nếu bạn chưa làm như vậy

chuyển sang Xcode 4.6.3

sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer

gem install libv8 -v '3.11.8.17' Hoặc bất kỳ phiên bản nào được gắn với phiên bản therubyracer của bạn

chuyển sang Xcode 6.1.1, 6.2-beta hoặc 6.3-beta (hoặc nếu bạn muốn thử cài đặt Xcode hiện tại của mình, hãy điều chỉnh dòng này, tôi đã xác nhận cả 3 công việc này)

sudo xcode-select --switch /Applications/Xcode6.1.1.app/Contents/Developer

gem install therubyracer -v '0.11.4' hoặc phiên bản bạn đang cố gắng cài đặt.


1
Cảm ơn @ th01, điều này đã làm việc cho tôi ... Tôi đã thử mọi thứ tôi có thể tìm thấy trong 3 giờ ... trong trường hợp của tôi, đó là viên ngọc libv8. Đã tải xuống Xcode4.6.3 và chạy nó với phiên bản đó và nó đã được cài đặt thành công. Dưới đây là một liên kết với một hướng dẫn nhanh về cách cài đặt nhiều phiên bản Xcode: blogs.oracle.com/mobile/entry/how_to_install_multiple_xcodes
miligraf

Khi tôi tải xuống Xcode 4.6.3 và sau đó chạy sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developervà sau đó chạy, gem install libv8 -v '3.3.10.4'tôi nhận được: unable to locate xcodebuild, please make sure the path to the Xcode folder is set correctly! Tôi đang làm gì sai?
Wylliam Judd

1

Tôi đã gặp lỗi gần giống khi cố gắng cài đặt therubyracer 0.12.0 để nó hoạt động với libv8. Điều này đã làm việc cho tôi:

$ brew upgrade gcc

$ gem uninstall therubyracer

$ gem uninstall libv8

$ gem install therubyracer -v '0.12.0'
Fetching: therubyracer-0.12.0.gem (100%)
Building native extensions.  This could take a while...
Successfully installed therubyracer-0.12.0
1 gem installed

$ gem install libv8 -v '3.16.14.3' -- --with-system-v8
Fetching: libv8-3.16.14.3.gem (100%)
Building native extensions with: '--with-system-v8'
This could take a while...
Successfully installed libv8-3.16.14.3
1 gem installed

0

Tôi đã gặp vấn đề tương tự khi nâng cấp từ OSX Mountain Lion lên OSX Mavericks.

Nâng cấp từ ruby-1.8.7-p354 lên ruby-1.8.7-375 đã thực hiện một mẹo nhỏ đối với tôi.

Có thể thử nâng cấp từ ruby ​​1.9.3-p194 lên rc1 (1.9.3 hiện trên p484)

giả sử bạn sử dụng rbenv:

rbenv install 1.9.3-rc1
rbenv rehash
rbenv global 1.9.3-rc1
bundle install

0

Tôi gặp sự cố này sau khi nâng cấp từ Mavericks lên Yosemite. Vấn đề là tôi đã biên dịch phiên bản Ruby của mình với phiên bản OSX cũ.

Nếu tôi chạy

ruby -rubygems -e 'puts Gem::Platform.new(RUBY_PLATFORM)'

Tôi sẽ nhận được x86_64-darwin-13thay vìx86_64-darwin-14 cho Yosemite.

Để cài đặt lại Ruby I

  1. Phiên bản cũ bị gỡ bỏ hoàn toàn: rvm remove ruby-2.1.1
  2. Được cài đặt lại từ nguồn (--disable-binary không sử dụng các tệp nhị phân được biên dịch trước và buộc xây dựng): rvm reinstall --disable-binary 2.1

Sau đó, tôi đã có thể chạy bundle installmà không có lỗi sau khi thử tất cả các giải pháp ở trên.


-2

Những gì tôi đã làm là trên osx mavericks:

git clone git@github.com:cowboyd/therubyracer.git

Sau đó:

gem build therubyracer.gemspec
gem install therubyracer-0.12.1.gem

Quy trình này đã tải xuống phiên bản nhị phân của libv8 và cài đặt nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.