ERROR: Failed to build gem native extension (ruby extconf.rb): Mac OSX

47,921

Solution 1

Try this:

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future gem install <gemName>

For an explanation see this answer

Solution 2

If this is occuring in OSX Mavericks, please ensure the command line tools are installed by running the following.

Older editions of OSX & XCode had the install for Command Line Tools in the XCode IDE itself. In OSX Mavericks I had to run the commands below to fix my command line tools so that I could install rubygems using native extensions.

$ sudo xcode-select --install
$ xcode-select --print-path
/Library/Developer/CommandLineTools
Share:
47,921
David Williams
Author by

David Williams

Updated on January 18, 2020

Comments

  • David Williams
    David Williams over 4 years

    I am attempting to install a gem, and I get this error, which myself and the gem author have never seen before. How do I fix this?

    Davids-MacBook-Pro:web david$ sudo /usr/bin/gem install compass --pre
    Password:
    Building native extensions.  This could take a while...
    ERROR:  Error installing compass:
    ERROR: Failed to build gem native extension.
    
    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
    checking for ffi.h... no
    checking for ffi.h in /usr/local/include,/usr/include/ffi... yes
    checking for ffi_call() in -lffi... yes
    checking for ffi_prep_closure()... yes
    checking for ffi_raw_call()... no
    checking for rb_thread_blocking_region()... yes
    checking for rb_thread_call_with_gvl()... yes
    checking for rb_thread_call_without_gvl()... yes
    checking for ffi_prep_cif_var()... no
    creating extconf.h
    creating Makefile
    
    make "DESTDIR="
    compiling AbstractMemory.c
    compiling ArrayType.c
    compiling Buffer.c
    compiling Call.c
    Call.c:303:5: warning: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99 [-Wimplicit-function-declaration]
    rbffi_thread_blocking_region(call_blocking_function, data, (void *) -1, NULL);
    ^
    ./Thread.h:78:39: note: expanded from macro 'rbffi_thread_blocking_region'
    # define rbffi_thread_blocking_region rb_thread_call_without_gvl
                                      ^
    1 warning generated.
    compiling ClosurePool.c
    compiling DataConverter.c
    DataConverter.c:43:1: warning: control may reach end of non-void function [-Wreturn-type]
    }
    ^
    1 warning generated.
    compiling DynamicLibrary.c
    compiling ffi.c
    compiling Function.c
    Function.c:479:33: warning: incompatible pointer types passing 'VALUE (void *)' to parameter of type 'void *(*)(void *)' [-Wincompatible-pointer-types]
        rb_thread_call_with_gvl(callback_with_gvl, &cb);
                                ^~~~~~~~~~~~~~~~~
    Function.c:102:46: note: passing argument to parameter 'func' here
    extern void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1);
                                             ^
    Function.c:563:9: warning: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99 [-Wimplicit-function-declaration]
        rb_thread_call_without_gvl(async_cb_wait, &w, async_cb_stop, &w);
        ^
    Function.c:738:1: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
    3 warnings generated.
    compiling FunctionInfo.c
    compiling LastError.c
    compiling LongDouble.c
    compiling MappedType.c
    compiling MemoryPointer.c
    compiling MethodHandle.c
    compiling Platform.c
    compiling Pointer.c
    compiling Struct.c
    compiling StructByReference.c
    compiling StructByValue.c
    compiling StructLayout.c
    compiling Thread.c
    compiling Type.c
    compiling Types.c
    compiling Variadic.c
    linking shared-object ffi_c.bundle
    clang: error: unknown argument: '-multiply_definedsuppress' [-Wunused-command-line-argument-hard-error-in-future]
    clang: note: this will be a hard error (cannot be downgraded to a warning) in the future
    make: *** [ffi_c.bundle] Error 1
    
    
    Gem files will remain installed in /Library/Ruby/Gems/2.0.0/gems/ffi-1.9.3 for inspection.
    Results logged to /Library/Ruby/Gems/2.0.0/gems/ffi-1.9.3/ext/ffi_c/gem_make.out
    
  • David Williams
    David Williams almost 10 years
    I followed that post, but still get the same clang: error: unknown argument: '-multiply_definedsuppress' [-Wunused-command-line-argument-hard-error-in-future] clang: note: this will be a hard error (cannot be downgraded to a warning) in the future make: *** [ffi_c.bundle] Error 1 Gem files will remain installed in /Library/Ruby/Gems/2.0.0/gems/ffi-1.9.3 for inspection. Results logged to /Library/Ruby/Gems/2.0.0/gems/ffi-1.9.3/ext/ffi_c/gem_make.o‌​ut Davids-MacBook-Pro:~ david$ echo $ARCHFLAGS -Wno-error=unused-command-line-argument-hard-error-in-future ideas?
  • David Williams
    David Williams almost 10 years
    Did you read the bounty description? The install command no longer works imgur.com/yNM2RRC
  • Chris
    Chris almost 10 years
    My apologies; I must have skipped over the final link. I am taking a look at the other images and I'll update if I think of something.
  • Cereal
    Cereal almost 10 years
    You can download the command line tools directly from apple's website. Log in, and it should be a couple of entries down. developer.apple.com/downloads/index.action#
  • crazyGuy
    crazyGuy over 9 years
    $ sudo xcode-select --install works on Yosemite .1
  • Per Quested Aronsson
    Per Quested Aronsson over 9 years
    'xcode-select --print-path' gives '/Applications/Xcode.app/Contents/Developer' on my Mavericks, after running the install command.
  • dx7
    dx7 about 9 years
    The answer accepted is the same of this one 9 days after. :(