お仕事の種でもあるRubyの最新版が出ていたので、OS XとUbuntuでアップデートをしておりました。OS Xはこんな感じでインストールして特に問題なく移行完了。ところがUbuntu14.04ではビルドエラーが発生。
(中略) make[2]: ディレクトリ `/tmp/ruby-build.20150307150624.4543/ruby-2.2.1/ext/nkf' から出ます compiling basicsocket.c make[2]: ディレクトリ `/tmp/ruby-build.20150307150624.4543/ruby-2.2.1/ext/stringio' に入ります compiling stringio.c make[5]: ディレクトリ `/tmp/ruby-build.20150307150624.4543/ruby-2.2.1/ext/fiddle/libffi-3.2.1' から出ます make[4]: ディレクトリ `/tmp/ruby-build.20150307150624.4543/ruby-2.2.1/ext/fiddle/libffi-3.2.1' から出ます make[3]: ディレクトリ `/tmp/ruby-build.20150307150624.4543/ruby-2.2.1/ext/fiddle/libffi-3.2.1' から出ます linking shared-object fiddle.so <span style="color: #ff0000">/usr/bin/ld: ./libffi-3.2.1/.libs/libffi.a(raw_api.o): 再配置 R_X86_64_32S (`.rodata' に対する) は共有オブジェクト作成時には使用できません。-fPIC を付けて再コンパイルしてください。 ./libffi-3.2.1/.libs/libffi.a: error adding symbols: 不正な値です</span> collect2: error: ld returned 1 exit status make[2]: *** [../../.ext/x86_64-linux/fiddle.so] エラー 1 make[2]: ディレクトリ `/tmp/ruby-build.20150307150624.4543/ruby-2.2.1/ext/fiddle' から出ます make[1]: *** [ext/fiddle/all] エラー 2 make[1]: *** 未完了のジョブを待っています.... compiling socket.c compiling ossl_ssl_session.c linking shared-object sdbm.so compiling openssl_missing.c make[2]: ディレクトリ `/tmp/ruby-build.20150307150624.4543/ruby-2.2.1/ext/sdbm' から出ます compiling ossl_pkey_dsa.c (中略)
libffiといかにも怪しいところがあったのと、2.2.0が出たときになんかその辺りの内容で話題があったと記憶していたのでささっとぐぐってみると、日本語版が始まったスタックオーバーフローに行き当たる。
rbenv での Ruby 2.2.1 のインストールに失敗する - スタック・オーバーフロー
Home · sstephenson/ruby-build Wiki
なるほどruby-build経由でインストールする場合に、Ubuntuではlibffi-devが必要なのね。実際sudo apt-get install libffi-dev
としたところインストールが始まり、その後再ビルドすると問題なく終了。さて、gemの移行もするかな。