Back when I was fooling around with Ruby I wrote some code using the ruby-taglib library for manipulating mp3 tags. Later, I went through the process of installing Ubuntu 12.10 from scratch on my main system. Eventually I tried running the old on the new system and discovered that I needed to re-install ruby-taglib and ran into some difficulties.
I’ll start with the punchline for people just looking to get on with it:
$ sudo apt-get install ruby-dev libstdc++6-4.7-dev libtag1-dev g++ $ sudo gem install taglib-ruby libtag1-dev |
What follows is all the gory details with the error messages in the hope that helps the poor soul using Google to solve this issue. First, I tried it with none of the above packages installed:
$ sudo gem install taglib-ruby Building native extensions. This could take a while... ERROR: Error installing taglib-ruby: ERROR: Failed to build gem native extension. /usr/bin/ruby1.9.1 extconf.rb /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mkmf (LoadError) from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' from /var/lib/gems/1.9.1/gems/taglib-ruby-0.5.2/ext/extconf_common.rb:5:in `<top (required)>' from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' from extconf.rb:2:in `<main>' Gem files will remain installed in /var/lib/gems/1.9.1/gems/taglib-ruby-0.5.2 for inspection. Results logged to /var/lib/gems/1.9.1/gems/taglib-ruby-0.5.2/ext/taglib_base/gem_make.out |
Next I tried installing the just the ruby-dev package:
$ sudo apt-get install ruby-dev $ sudo gem install taglib-ruby Building native extensions. This could take a while... ERROR: Error installing taglib-ruby: ERROR: Failed to build gem native extension. /usr/bin/ruby1.9.1 extconf.rb checking for main() in -lstdc++... no You must have libstdc++ installed. *** 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 --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=/usr/bin/ruby1.9.1 --with-tag-dir --without-tag-dir --with-tag-include --without-tag-include=${tag-dir}/include --with-tag-lib --without-tag-lib=${tag-dir}/lib --with-stdc++lib --without-stdc++lib Gem files will remain installed in /var/lib/gems/1.9.1/gems/taglib-ruby-0.5.2 for inspection. Results logged to /var/lib/gems/1.9.1/gems/taglib-ruby-0.5.2/ext/taglib_base/gem_make.out |
This result was confusing because libstdc++ was installed on the system. I realized I needed the libstdc++ development package:
$ apt-cache search stdc++ | grep dev lib32gmp-dev - Multiprecision arithmetic library developers tools (32bit) libgmp-dev - Multiprecision arithmetic library developers tools libstdc++6-4.4-dev - GNU Standard C++ Library v3 (development files) libstdc++6-4.6-dev - GNU Standard C++ Library v3 (development files) libstdc++6-4.7-dev - GNU Standard C++ Library v3 (development files) libstdc++6-4.5-dev - GNU Standard C++ Library v3 (development files) libstdc++6-4.6-dev-armel-cross - GNU Standard C++ Library v3 (development files) libstdc++6-4.6-dev-armhf-cross - GNU Standard C++ Library v3 (development files) libstdc++6-4.7-dev-armel-cross - GNU Standard C++ Library v3 (development files) libstdc++6-4.7-dev-armhf-cross - GNU Standard C++ Library v3 (development files) $ sudo apt-get install libstdc++6-4.7-dev $ sudo gem install taglib-ruby Building native extensions. This could take a while... ERROR: Error installing taglib-ruby: ERROR: Failed to build gem native extension. /usr/bin/ruby1.9.1 extconf.rb checking for main() in -lstdc++... yes checking for main() in -ltag... no You must have taglib installed in order to use taglib-ruby. Debian/Ubuntu: sudo apt-get install libtag1-dev Fedora/RHEL: sudo yum install taglib-devel Brew: brew install taglib MacPorts: sudo port install taglib *** 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 --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=/usr/bin/ruby1.9.1 --with-tag-dir --without-tag-dir --with-tag-include --without-tag-include=${tag-dir}/include --with-tag-lib --without-tag-lib=${tag-dir}/lib --with-stdc++lib --without-stdc++lib --with-taglib --without-taglib Gem files will remain installed in /var/lib/gems/1.9.1/gems/taglib-ruby-0.5.2 for inspection. Results logged to /var/lib/gems/1.9.1/gems/taglib-ruby-0.5.2/ext/taglib_base/gem_make.out |
And the next piece was the taglib development package:
$ sudo apt-get install libtag1-dev $ sudo gem install taglib-ruby Building native extensions. This could take a while... ERROR: Error installing taglib-ruby: ERROR: Failed to build gem native extension. /usr/bin/ruby1.9.1 extconf.rb checking for main() in -lstdc++... yes checking for main() in -ltag... yes creating Makefile make compiling taglib_base_wrap.cxx make: g++: Command not found make: *** [taglib_base_wrap.o] Error 127 Gem files will remain installed in /var/lib/gems/1.9.1/gems/taglib-ruby-0.5.2 for inspection. Results logged to /var/lib/gems/1.9.1/gems/taglib-ruby-0.5.2/ext/taglib_base/gem_make.out |
And finally we need g++ (how else can we compile C++?):
$ sudo apt-get install g++ $ sudo gem install taglib-ruby Building native extensions. This could take a while... Successfully installed taglib-ruby-0.5.2 1 gem installed Installing ri documentation for taglib-ruby-0.5.2... Installing RDoc documentation for taglib-ruby-0.5.2... |