macのライブラリ関係覚え書き

拡張子 .dylib って?


ダイナミックリンクライブラリ
windowsなら、dll。linuxなら、so。
.so を使うこともできるらしい

拡張子.bundleって?


ローダブルバンドル
ダイナミックリンクライブラリへのリンクと関連ファイルやデータをひとまとめにしたものらしい

.bundleがリンクしている.bylibをリストアップしたい


otoolコマンドを使う

$ otool -L /Users/kobayashi/.rvm/rubies/ruby-1.8.7-p174/lib/ruby/1.8/i686-darwin10.8.0/iconv.bundle
/Users/kobayashi/.rvm/rubies/ruby-1.8.7-p174/lib/ruby/1.8/i686-darwin10.8.0/iconv.bundle:
        /Users/kobayashi/.rvm/rubies/ruby-1.8.7-p174/lib/libruby.dylib (compatibility version 1.8.0, current version 1.8.7)
        /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)
        /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)

.bundleがリンクしている.bylibを変更する


標準のライブラリから、Homebrewでインストールしたライブラリを使いたい時とか

install_name_tool -change を使う


例 : .rvmにある、iconv.bundle がリンクしている標準の libiconv.2.dylibから、Homebrewのライブラリに変更

$ install_name_tool -change /Users/kobayashi/.rvm/rubies/ruby-1.8.7-p174/lib/ruby/1.8/i686-darwin10.8.0/iconv.bundle \
  /usr/lib/libiconv.2.dylib \
  /usr/local/Cellar/libiconv/1.13/lib/libiconv.2.dylib