3

I've followed the steps to install v8 and the libv8 gem. After that, I am unable to successfully install therubyracer 0.12.3. The mkmf.log chokes when trying to validate the v8.h header and throws out an unknown type name-error.

My environment:

  • Ruby: 2.6.3
  • OSX: 10.15
  • xcode-select: 2373
  • libv8: 3.16.14.19
  • v8:v8@3.15 (via Homebrew) brew info v8@3.15 = v8@3.15: stable 3.15.11.18 (bottled) [keg-only]
  • g++: Apple clang version 11.0.0 (clang-1100.0.33.17)

I've worked through the suggestions here. Anyone got a suggestions?

Gem install

gem install therubyracer -v '0.12.3' -- --with-v8-dir=/usr/local/opt/v8@3.15

Failure message

Building native extensions with: '--with-v8-dir=/usr/local/opt/v8@3.15'
This could take a while...
ERROR:  Error installing therubyracer:
ERROR: Failed to build gem native extension.

current directory: /Users/kristinsmith/.gem/ruby/2.6.0/gems/therubyracer-0.12.3/ext/v8
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby -I 
/Library/Ruby/Site/2.6.0 -r ./siteconf20200120-16109-4pdf22.rb extconf.rb --with-v8- 
dir\=/usr/local/opt/v8@3.15

checking for -lpthread... yes
checking for -lobjc... yes
checking for v8.h... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/$(RUBY_BASE_NAME)
--with-pthreadlib
--without-pthreadlib
--with-objclib
--without-objclib
--enable-debug
--disable-debug
--with-v8-dir
--with-v8-include
--without-v8-include=${v8-dir}/include
--with-v8-lib
--without-v8-lib=${v8-dir}/lib
/Users/kristinsmith/.gem/ruby/2.6.0/gems/libv8-3.16.14.19/ext/libv8/location.rb:50:in 
`configure': By using --with-system-v8, you have chosen to use the version  
(Libv8::Location::System::NotFoundError)
of V8 found on your system and *not* the one that is bundled with 
the libv8 rubygem. 

However, your system version of v8 could not be located. 

Please make sure your system version of v8 that is compatible 
with 3.16.14.19 installed. You may need to use the 
--with-v8-dir option if it is installed in a non-standard location
from /Users/kristinsmith/.gem/ruby/2.6.0/gems/libv8-3.16.14.19/lib/libv8.rb:7:in 
`configure_makefile'
from extconf.rb:32:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

/Users/kristinsmith/.gem/ruby/2.6.0/extensions/universal-darwin-19/2.6.0/therubyracer- 
0.12.3/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/kristinsmith/.gem/ruby/2.6.0/gems/therubyracer- 
0.12.3 for inspection.
Results logged to /Users/kristinsmith/.gem/ruby/2.6.0/extensions/universal-darwin . 
19/2.6.0/therubyracer-0.12.3/gem_make.out

mkmf.log

...
find_header: checking for v8.h... -------------------- no

"xcrun clang I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10. 
5.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/universal-darwin19 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0 -I. -I/usr/local/opt/v8@3.15/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT   -Wall -g -rdynamic  -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS  -arch x86_64  -c conftest.c"
clang: warning: argument unused during compilation: '-rdynamic' [-Wunused-command-line-argument]
 In file included from conftest.c:3:
/usr/local/opt/v8@3.15/include/v8.h:98:1: error: unknown type name 'namespace' namespace v8 
{
 ^
/usr/local/opt/v8@3.15/include/v8.h:98:13: error: expected ';' after top level declarator 
namespace v8 {
        ^
        ;
2 errors generated.
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: #include <v8.h>
/* end */

--------------------
...
Kristin S
  • 41
  • 7
  • can you check exact details of `brew info v8` v8 installed? because it is unable to find `checking for v8.h... no` library. – Kamal Panhwar Jan 21 '20 at 09:44
  • I edited the post to include the brew info. `brew info v8@3.15` = v8@3.15: stable 3.15.11.18 (bottled) [keg-only] – Kristin S Jan 21 '20 at 15:07
  • Your error in mkmf.log is telling you that you have issue with compiling tools, but if brew is running that mean you have proper xcode tools installed, so I don't see how come compiler error coming. You may try `xcode-select -p 1>/dev/null;echo $?` on terminal and see if return 0 than it is also perfect, otherwise you can try `xcode-select --install` – Kamal Panhwar Jan 22 '20 at 05:32
  • Thanks for the tip! `xcode-select -p 1>/dev/null;echo $?` returns 0 – Kristin S Jan 22 '20 at 15:13

2 Answers2

1

I had the same error, and finally it appeared that rbenv ruby version was ignored. Running eval "$(rbenv init -)" solved the issue and therubyracer was installed correctly.

1

Many thanks for the help! The final solution turned out to be:

  1. Installing rbenv
  2. Setting a Ruby version (2.6.3) in rbenv
  3. Adding the following lines to my .zshrc:
    • eval "$(rbenv init -)" (Thanks, Mykolas Kairys)
    • export LDFLAGS="-L~/.rbenv/versions/2.6.3/lib"
    • export CPPFLAGS="-I~/.rbenv/versions/2.6.3/include"
Kristin S
  • 41
  • 7
  • Thanks! I tried everything [here](https://github.com/rubyjs/libv8/issues/282) but only with your solution it worked! – carla Nov 23 '20 at 22:19