投稿

11月, 2009の投稿を表示しています

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を指定して対処.

Octave-3.2.x

Octave-3.2以降の更新が滞っていた. doxygenのコンパイルが通らないため. doxygenをリンクするときに, srcからみて../libにあるlibmd5.aがなぜか見つからないためだった. 直接../lib/libmd5.aを指定したところ, リンクがうまくいくようになった (#22426).

doxygenは, octaveが依存しているftglがHTMLのドキュメント作成のために要求していたが, ドキュメントは必ずしも必要ない. またPDFのドキュメントを作るためにconfigureはpdflatexなども探しているが依存関係に指定されていない. そこで, docをvariantととして分離するように提案した (#22427).

Leopardでx86_64

MacPorts 1.8では, ${prefix}/etc/macports/macports.conf (${prefix}はたいてい/opt/local) にコンパイル時のアーキテクチャbuild_archを設定できる. Snow Leopardでは, x86_64がデフォルトなのですべて64-bitでコンパイルされる. Tiger, Leopardでは, Intel Macの場合はi386, PowerPCの場合はppcなので32-bitになる.

Leopardでbuild_archにx86_64を設定して, さらからコンパイルしてみた. p5-locale-gettextがデフォルトのアーキテクチャ以外でコンパイルできない (19381). autoconfなどが依存しているhelp2manがp5-locale-gettextに依存しているので, 先に進めない. nomaintainerなので困ったものだ.