Bundle FFI Install Error

By Morten Møller Riis

October 10 2012 12:00 CET

Ran into this error today:

               Installing ffi (1.1.5) with native extensions 
               Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
            
                    /Users/mmr/.rbenv/versions/1.9.3-p0/bin/ruby extconf.rb 
               checking for ffi.h... *** 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=/Users/mmr/.rbenv/versions/1.9.3-p0/bin/ruby
                  --with-ffi_c-dir
                  --without-ffi_c-dir
                  --with-ffi_c-include
                  --without-ffi_c-include=${ffi_c-dir}/include
                  --with-ffi_c-lib
                  --without-ffi_c-lib=${ffi_c-dir}/lib
                  --with-libffi-config
                  --without-libffi-config
                  --with-pkg-config
                  --without-pkg-config
               /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
               You have to install development tools first.
                  from /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/mkmf.rb:506:in `try_cpp'
                  from /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/mkmf.rb:931:in `block in have_header'
                  from /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/mkmf.rb:790:in `block in checking_for'
                  from /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/mkmf.rb:284:in `block (2 levels) in postpone'
                  from /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/mkmf.rb:254:in `open'
                  from /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/mkmf.rb:284:in `block in postpone'
                  from /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/mkmf.rb:254:in `open'
                  from /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/mkmf.rb:280:in `postpone'
                  from /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/mkmf.rb:789:in `checking_for'
                  from /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/mkmf.rb:930:in `have_header'
                  from extconf.rb:9:in `<main>'
            
            
               Gem files will remain installed in /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/ffi-1.1.5 for inspection.
               Results logged to /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/ffi-1.1.5/ext/ffi_c/gem_make.out
               An error occurred while installing ffi (1.1.5), and Bundler cannot continue.
               Make sure that `gem install ffi -v '1.1.5'` succeeds before bundling.
            	

Examining /Users/mmr/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/ffi-1.1.5/ext/ffi_c/mkmf.log reveals the following:

               [ ... ]
               sh: /usr/bin/gcc-4.2: No such file or directory
               [ ... ]
               

So it is looking for gcc-4.2 instead of just gcc. Create a symlink:

               sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2
            	

And it should work again.