install_name

Macの共有ライブラリには,インストール先の情報が記録される.インストール先は,-install_nameの指定があればそのディレクトリ,なければ-oで指定したものが使われる.ライブラリのinstall nameは,これをリンクしたライブラリやバイナリに転写されていく.

-install_nameの後はスペース.=を入れると正しく動作しないので注意.

オブジェクトファイルに関する情報は,otoolで表示することができる.
ライブラリの名前とバージョン,リンクしているオブジェクトやライブラリを表示するには,
otool -L ライブラリまたはバイナリ

ライブラリのinstall nameを表示するには,
otool -D ライブラリ

を使う.

共有ライブラリのinstall nameの変更は,install_name_toolを使う.
install_name_tool -id 新しいパス

でできる.ライブラリやバイナリに書き込まれた他のライブラリのinstall nameを変更するには,
install_name_tool -change 古いパス 新しいパス

とする.

多くのフリーウェアでは,libtoolがこのあたりの面倒を見てくれるが,シェルスクリプトやGNU Makeを駆使して機種依存の問題を解消しようとしているものもある.

vaporは,configureの変わりにoptions.mk, site.mkを手動で編集したり,機種依存のインクルードファイル(例: Darwin.mk)を用意している.ライブラリには,生成したディレクトリのパスがinstall_nameとして記録されているため,うまく動作しない.DYLD_LIBRARY_PATHを設定してライブラリを見つけようとしている.既定の-two_levelnamespaceだとコマンドラインと共有ライブラリに記録されたパスしか検索しないので,ライブラリは見つからない.

make/config/Darwin.mkのSHARED_LDFLAGSに-install_nameを指定して対処.

コメント

このブログの人気の投稿

静的サイト生成ツールの導入

uptex

TeXのソースを分割してTeXShopでタイプセット