“ gem install therubyracer -v '0.10.2'” บน osx mavericks ไม่ได้ติดตั้ง


91

กำลังพยายามติดตั้ง therubyracer บน mavericks โดยใช้ "gem install therubyracer -v '0.10.2'" แต่ฉันได้รับข้อผิดพลาดต่อไปนี้:

/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

ใครสามารถช่วยฉันหาวิธีทำให้อัญมณีนี้ทำงานได้? ฉันติดตั้งเครื่องมือบรรทัดคำสั่งแล้ว


คุณมีhomebrew? ลองติดตั้ง v8 brew install v8ก่อนติดตั้ง gem
Ivan Shamatov

ฉันเชื่อว่าการติดตั้ง brew v8 เป็นปัญหาที่แยกต่างหาก โปรดดูstackoverflow.com/questions/11598655/therubyracer-install-error สำหรับรายละเอียดเกี่ยวกับ v8 with brew
Ash Blue

คำตอบ:


242

หากคุณตัดสินใจที่จะใช้therubyracerอัญมณีเวอร์ชันใหม่กว่าคุณจะไม่มีปัญหานี้อีกต่อไป

มิฉะนั้น:

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
แนวทางนี้ดูเหมือนจะดีกว่าการแก้ไข symlinks
Nilesh

3
brew tap homebrew/dupesแก้ไข "ข้อผิดพลาด: ไม่มีสูตรสำหรับ apple-gcc42"
TomFuertes

1
ในที่สุดสิ่งนี้ก็แก้ไขปัญหาให้ฉันได้ - ขอบคุณ! ฉันลองใช้โซลูชัน symlink ของ M.Scott Ford ด้านล่างและดูเหมือนจะใช้งานได้ แต่เกิดข้อผิดพลาดเมื่อฉันพยายามทำอะไรจริง ๆ (คราดราง ฯลฯ )
Kyle Fox

2
การอัปเดตเป็น therubyracer 0.12.0 แก้ไขปัญหานี้ให้ฉันแล้ว
jackocnr

6
น่าเสียดายที่ไม่มีโซลูชันใดที่ใช้ได้ผลกับฉันบน OSX 10.9, Ruby 2.1.0 และ therubyracer 0.12.1
turboladen

16

ในที่สุดฉันก็ใช้งานได้หลังจากดิ้นรน ... ขอบคุณ Simon และ Alvaro

ฉันมีสิ่งหนึ่งที่จะเพิ่มแม้ว่าการใช้แฟล็ก - กับระบบ -8 ไม่ได้ผลสำหรับฉัน ... ดังนั้นฉันจึงลบระบบ v8 ของฉันด้วย

brew uninstall v8

และการวิ่ง

gem install libv8

หากคุณรันgem install libv8ด้วยแฟล็ก system v8 แล้วให้แน่ใจว่าได้ถอนการติดตั้งเวอร์ชัน gem นั้นแล้ว (ทำได้โดยการรันgem uninstall libv8) สิ่งสำคัญคือคุณไม่ควรใช้อันที่ให้มาโดยการชงดูเหมือนว่าจะไม่ทำงานใน Mavericks (ติดตั้งได้ดีและบันเดิลเลอร์จะรายงานว่าบันเดิลของคุณเสร็จสมบูรณ์ แต่แอพของคุณจะล้มเหลวเมื่อพยายามใช้ v8 ).

เพื่อสรุปคำตอบการทำสิ่งต่อไปนี้ได้ผลสำหรับฉัน:

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
สิ่งนี้ได้ผลสำหรับฉัน แต่ฉันเชื่อมโยง gcc เข้ากับ / usr / local / bin และรีสตาร์ทเทอร์มินัลดังนั้นฉันจึงสามารถลบออกได้หลังจากติดตั้ง libv8
Jamon Holmgren

2
การซิงค์ไบนารี homebrew กับเวอร์ชันเฉพาะนั้นเป็น / usr / bin เป็นความคิดที่แย่มาก สิ่งต่อไปbrew updateที่ตามมาและปรับเปลี่ยนเส้นทางเหล่านั้นจะทำให้คุณอยู่ในสภาพแตกหัก
mrm

10

ฉันมีปัญหาเดียวกันสิ่งนี้ใช้ได้กับฉัน:

therubyracer (0.10.2) และ libv8 (3.3.10.4)

ก่อนอื่น:

  • brew install apple-gcc42
  • คุณจะต้องเชื่อมโยงทุกไฟล์ไบนารีของคอมไพเลอร์ ( gcc, cpp, g++) เพื่อ/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/<compiler>

หลังจากนั้นคุณสามารถลองสิ่งนี้:

  • brew install v8
  • gem install libv8 -v '3.3.10.4' -- --with-system-v8
  • gem install therubyracer -v 'therubyracer'หรือbundle installลงในไดเรกทอรีของโครงการราง

apple-gcc42: This formula either does not compile or function as expected on macOS macOS ของฉันคือ 10.12.6
Wylliam Judd

7

ฉันเพิ่งมีปัญหาเดียวกันและเป็นหนึ่งในการแก้ปัญหาคือขณะนี้ที่จะใช้แอปเปิ้ล gcc42แทนเสียงดังกราวรวบรวมอัญมณีทั้งสอง:

brew install apple-gcc42

จากนั้นคุณมีทางเลือกระหว่างการทำ symlink ใน / usr / bin สำหรับไบนารี {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

ในความเป็นจริงg ++ควรจะเพียงพอ

หรือ ... คุณสามารถส่งออกตัวแปรสภาพแวดล้อม CC / CXX / CPP ด้วยเส้นทางที่สอดคล้องกับไบนารีที่สร้างโดย homebrew นั่นเป็นวิธีแก้ปัญหาที่สะอาดกว่า

วิธีที่สามคือดาวน์โหลด Xcode 4.6.3 และติดตั้งในโฟลเดอร์Applications จากนั้นเข้าไปในเทอร์มินัล:

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

เมื่อติดตั้งอัญมณีแล้วคุณสามารถเปลี่ยนกลับไปเป็น Xcode 5.0 ได้:

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

ฉันจะเปลี่ยนคอมไพเลอร์เป็น apple-gcc42 ได้อย่างไร
user2711889

@ Simon เมื่อฉันพยายาม symlinc กับคอมไพเลอร์ฉันได้รับข้อความว่ามีไฟล์อยู่ นั่นคือไฟล์ clang หรือไม่? หากฉันเรียกใช้การติดตั้งบันเดิลดูเหมือนว่าจะไม่ใช้ gcc เนื่องจากข้อผิดพลาดเต็มไปด้วยการอ้างอิงเสียงดัง
isea

หากคุณใช้ MacPorts คุณไม่จำเป็นต้องเชื่อมโยงเพื่อชี้ไปยังเวอร์ชัน GCC อื่นมีคำสั่งในตัวสำหรับสิ่งนั้น (ดูคำตอบของฉัน)
jshkol

6

ฉันพบวิธีแก้ปัญหาที่ใช้งานได้โดยไม่ต้องติดตั้ง apple-gcc42

สิ่งนี้จะได้ผลหากข้อความแสดงข้อผิดพลาดที่คุณได้รับมีลักษณะดังนี้:

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'

จากนั้นคุณควรจะทำสิ่งต่อไปนี้ได้:

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

ที่มา: https://github.com/cowboyd/therubyracer/issues/277#issuecomment-27734348


+1 มหาศาลสำหรับอันนี้ อัญมณีจะติดตั้งบน CLI แต่ RubyMine v6 ปฏิเสธที่จะติดตั้ง ... การตั้งค่า symlink นี้ช่วยแก้ปัญหาได้ในที่สุด ขอบคุณ!
Ode

1
1000% นี้เชียร์ @ M.ScottFord ฉันใช้ rvm ดังนั้นคำสั่ง ln ของฉันคือ: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

ตามที่แนะนำไว้ในหลาย ๆ คำตอบสิ่งที่ง่ายที่สุดคือการรวบรวมส่วนขยายเนทีฟของ The Ruby Racer ด้วย Apple GCC 4.2 (แทนที่จะเป็นเวอร์ชันที่ติดตั้ง Xcode)

หากคุณใช้ MacPorts คุณไม่ควรต้องจัดการกับการตั้งค่าลิงก์สัญลักษณ์สำหรับไบนารี GCC ด้วยตนเอง port selectคำสั่งไม่ได้สำหรับคุณ หากคุณยังไม่ได้อัปเดต MacPorts ตั้งแต่ติดตั้ง Mavericks ให้ทำที่sudo port selfupdate. ด้วย MacPorts ที่เป็นปัจจุบันให้ลองทำดังต่อไปนี้:

# 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

โดยทั่วไปขั้นตอนนี้ ( sudo port select gcc [version]) จะทำงานเมื่อใดก็ได้ที่คุณต้องการใช้ GCC เวอร์ชันเฉพาะแทนที่จะเป็นเวอร์ชันที่ติดตั้งโดย Xcode (Apple LLVM v5 สำหรับ 10.9 Mavericks / Xcode 5)


1
ทำงานให้ฉันใน Mavericks
Evo_x

3

ฉันจัดการติดตั้ง therubyracer 0.12 และ libv8 3.16.14.3 บน ruby ​​2.0.0p353 และ os x 10.9

libv8 ต้องใช้ 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 ต้องใช้ gcc ในภายหลัง

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

ใช้bundleแทนgem install therubyracer


ขอบคุณ! ในที่สุดสิ่งนี้ก็ทำให้ฉันผ่านพ้นไปbundle installหลังจากลองผิดลองถูกมาหลายวัน สิ่งเดียวที่ฉันทำแตกต่างออกไปคือการถอนการติดตั้งเครื่องมือสำหรับนักพัฒนาทั้งหมดที่ติดตั้งโดยbrewจนกว่าจะgcc --versionมีรายงานว่าเป็นเวอร์ชัน Apple LLVM และได้รับการกำหนดค่าด้วย Xcode จากนั้นฉันจึงย้ายสิ่งที่มีอยู่/usr/bin/gcc(et al.) ออกก่อนที่จะเชื่อมต่อกับ apple-gcc42 libs จากนั้นแทนที่จะติดตั้ง gcc49 (ครั้งสุดท้ายที่ฉันลองใช้การกำหนดค่าของเรา) ฉันเพิ่งคัดลอก gcc, g ++ และ cpp libs ดั้งเดิมกลับมา เนื่องจากฉันได้ลองวิธีต่างๆ 3 โหลเพื่อหาวิธีที่เหมาะกับฉัน YMMV
Chris Bloom

3

นี่ควรเป็นวิธีที่ปลอดภัยและสะอาด (ไม่มี symlink) ในการติดตั้ง therubyracer สำหรับทุกคนที่มีปัญหา

นำมาจาก: gem install therubyracer -v 0.11.4 ล้มเหลวบน OS X 10.10

ติดตั้ง Xcode (หากคุณยังไม่มีเวอร์ชันใดเวอร์ชันหนึ่ง) 6.1.1, 6.2-beta หรือ 6.3-beta และ (จำเป็นต้องใช้) 4.6.3

gem uninstall libv8 หากคุณยังไม่ได้ดำเนินการ

เปลี่ยนเป็น Xcode 4.6.3

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

gem install libv8 -v '3.11.8.17' หรือรุ่นใดก็ตามที่เชื่อมโยงกับ therubyracer รุ่นของคุณ

เปลี่ยนเป็น Xcode 6.1.1, 6.2-beta หรือ 6.3-beta (หรือหากคุณต้องการลองติดตั้ง Xcode ในปัจจุบันของคุณให้ปรับบรรทัดนี้ฉันได้ยืนยันการทำงานทั้ง 3 อย่างนี้แล้ว)

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

gem install therubyracer -v '0.11.4' หรือเวอร์ชันที่คุณพยายามติดตั้ง


1
ขอบคุณ @ th01 สิ่งนี้ได้ผลสำหรับฉัน ... ฉันพยายามทุกอย่างที่หาได้เป็นเวลา 3 ชั่วโมง ... ในกรณีของฉันมันคืออัญมณี libv8 ดาวน์โหลด Xcode4.6.3 และรันกับเวอร์ชันนั้นและติดตั้งสำเร็จ นี่คือลิงค์พร้อมคำแนะนำสั้น ๆ เกี่ยวกับวิธีการติดตั้ง Xcode หลายรุ่น: blogs.oracle.com/mobile/entry/how_to_install_multiple_xcodes
miligraf

เมื่อฉันดาวน์โหลด Xcode 4.6.3 แล้วเรียกใช้sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developerแล้วเรียกใช้gem install libv8 -v '3.3.10.4'ฉันได้รับ: unable to locate xcodebuild, please make sure the path to the Xcode folder is set correctly! ฉันทำอะไรไม่ถูกต้อง?
Wylliam Judd

1

ฉันมีข้อผิดพลาดเกือบเหมือนกันเมื่อพยายามติดตั้ง therubyracer 0.12.0 เพื่อให้ทำงานกับ libv8 สิ่งนี้ใช้ได้ผลสำหรับฉัน:

$ 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

ฉันมีปัญหาเดียวกันนี้เมื่ออัปเกรดจาก OSX Mountain Lion เป็น OSX Mavericks

การอัพเกรดจาก Ruby-1.8.7-p354 เป็น Ruby-1.8.7-375 นั้นเป็นเคล็ดลับสำหรับฉัน

อาจจะลองอัปเกรดจาก Ruby 1.9.3-p194 เป็น rc1 (ตอนนี้ 1.9.3 อยู่เหนือ p484)

สมมติว่าคุณใช้ rbenv:

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

0

ฉันมีปัญหานี้หลังจากอัปเกรดจาก Mavericks เป็น Yosemite ปัญหาคือฉันรวบรวมเวอร์ชัน Ruby ของฉันกับ OSX เวอร์ชันเก่า

ถ้าฉันวิ่ง

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

ฉันจะได้รับx86_64-darwin-13แทนx86_64-darwin-14Yosemite

ในการติดตั้ง Ruby I

  1. ลบเวอร์ชันเก่าโดยสิ้นเชิง: rvm remove ruby-2.1.1
  2. ติดตั้งใหม่จากซอร์ส (--disable-binary ไม่ใช้ไบนารีที่คอมไพล์ไว้ล่วงหน้าและบังคับให้สร้าง): rvm reinstall --disable-binary 2.1

จากนั้นฉันก็สามารถทำงานได้bundle installโดยไม่มีข้อผิดพลาดหลังจากลองใช้วิธีแก้ปัญหาทั้งหมดข้างต้น


-2

สิ่งที่ฉันทำคือทำกับ osx mavericks:

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

จากนั้น:

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

ขั้นตอนนี้ดาวน์โหลด libv8 เวอร์ชันไบนารีและติดตั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.