知らない事だらけだ。
シェアードライブラリをロードするときのライブラリパスをコンパイル時に 埋め込む $LD_RUN_PATH とか ld -rpath みたいなのがDarwinにはないなあ。 と思っていたら、それは、動的ライブラリを作るときにその動的ライブラリ をインストールするパスという情報で埋め込むようだ。つまり、 動的ライブラリを利用するコマンドをリンクするときではなく、 動的ライブラリそのものをmakeするときにパス情報を埋め込む。 これもひとつの方法だなあ。賢いようにも感ずる。
さて、分かったことを書くけれども、以下の内容は全くの誤解かも。
動的ライブラリを作るには
gcc -dynamiclib \ -install_name /full/path/to/libhogehoge.X.dylib \ -current_version N -compatibility_version N \ -o libhogehoge.VERSION.dylib *.o
ってな具合に作成するのだが、この -install_name のところに フルパスを埋め込むのが味噌。これをちゃんとしていないパッケージが 多いのでちうい。
libtiffとかNetPBMはいちおう Mac OS X でmakeはできるものの この -install_name に /libhogehoge.X.dylib なんてのを指定しちゃう もんだから libtiff.3.6.1.dylib なんかをリンクしたコマンドを 実行するときに探せなくて怒られる。ってことで、libhogehoge.dylib をリンク する様子をちゃんと見張って、-install_name に所望のディレクトリ名を 埋め込んでくれているかをチェックせんとなあ。
てことで、netpbm-10.18.15 はインストール完了。
./lib/
にて、
% cc -no-cpp-precomp -L/usr/iekei/graphics/lib -L/usr/iekei/netpbm/lib \
-dynamiclib -install_name /usr/iekei/netpbm/lib/libnetpbm.10.dylib -o \
libnetpbm.10.18.dylib libpm.o fileio.o bitio.o colorname.o libpbm1.o \
libpbm2.o libpbm3.o libpbm5.o libpgm1.o libpgm2.o libppm1.o libppm2.o \
libppmcmap.o libppmcolor.o libppmd.o libppmfloyd.o libpnm1.o libpnm2.o \
libpnm3.o libpam.o libpammap.o libsystem.o util/shhopt.o util/nstring.o \
-lc
と手動でやってからmakeし直してめでたしめでたし。
叱咤激励感想ツッコミはゲストブックへ
Generated with mkdiary.rb