主に IT 技術を整理するためにメモ的に書き溜めています。少しだけフリーソフトもあるよ。コメントを残すには、 facebook を使ってください。

Mac 上で fat file dylib を作成するには

最終更新日 2010-09-14 01:11:27 (1年以上前の記事です)

最近 Mac 上で darwin port を使ったパッケージ管理に嫌気を感じ、全部コンパイルしてインストールし始めてみた。今の Macbook は Core 2 なので、せっかくだから i386 と x86_64 両方の architecture に対応したライブラリを作ってみた。
作ってみたというよりは、実際過去に i386 でコンパイルした物があり、それにリンクしているライブラリが x86_64 をインストールしたことで動かなくなったので、やらざるをえなかったわけだけど。

例としてここでは openssl-0.9.8o をインストールしてみる。コンパイラは gcc-4.5.1 を使用。

x86_64 用のコンパイル

openssl は configure の仕方が若干違うが、 target を強制的に選択させるようになっているため、個人的には好み。とりあえず tar を展開したら以下のように configure する。

$ CC=gcc ./Configure --prefix=/usr/local enable-all shared darwin64-x86_64-cc

このまま make と行きたい所だけど、 make をすると gcc に存在しない -arch オプションでエラーになる。

cc1: error: unrecognized command line option "-arch"

なので Makefile を少し書き換える。 CFLAG=... のラインを探して、 -arch x86_64 となっている所を -m64 にする。

CFLAG= -fPIC -fno-common -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -Ot-frame-pointer -DL_ENDIAN -DMD32_REG_T=int -Wall

そして make してインストール。

$ make; sudo make install

ここまでやると x86_64 のライブラリやその他実行ファイル、ヘッダーファイルが /usr/local にインストールされる。そして次に i386 用のコンパイル。

i386 用のコンパイル

ここまでやったら x86_64 をビルドしたディレクトリをそのまま使っても良いけど、新しく tar を展開してクリーンな状態でやってもいいかも。そのままのディレクトリでやる場合は、 make distclean して、余分なファイルを削除する。

$ make distclean; rm libssl.* libcrypto.*

そして i386 用の configure を実行。

$ CC=gcc ./Configure --prefix=/usr/local enable-all shared darwin-i386-cc

先ほど同様 Makefile の -arch i386 を -m32 に変更して、 make 。ここでインストールをしてしまうと、先ほどのファイルが上書きされてしまうので、 make で止める。

fat file の作成

make が成功した段階で x86_64 用ライブラリが /usr/local/lib に配置され、 i386 用がビルドディレクトリに配置されている。
最後にこの二つの shared lib を lipo コマンドでコンバインする。

$ lipo -create -arch i386 libssl.0.9.8.dylib -arch x86_64 /usr/local/lib/libssl.0.9.8.dylib -output libssl.0.9.8.dylib.fat
$ lipo -create -arch i386 libcrypto.0.9.8.dylib -arch x86_64 /usr/local/lib/libcrypto.0.9.8.dylib -output libcrypto.0.9.8.dylib.fat

念のため、出来上がったファイルをコピーする前に確認しておく。

$ lipo -info libssl.0.9.8.dylib 
Architectures in the fat file: libssl.0.9.8.dylib are: i386 x86_64

正常にできあがってる。そしたら出来上がったファイルを /usr/local/lib に配置して完了。

$ sudo cp libcrypto.0.9.8.dylib.fat /usr/local/lib/libcrypto.0.9.8.dylib
sudo cp libssl.0.9.8.dylib.fat  /usr/loca/lib/libssl.0.9.8.dylib
最終更新日 2010-09-14 01:11:27

コメント このエントリーをはてなブックマークに追加

フリーソフトウエア
EnjoiFLV
EnjoiPacket
EnjoiCrypto
ランキング
rank2, rank3, rank7, rank10, rank11
todo メモ
facebook 対応
ページ処理
RSS feed
検索機能
認証いる?
更新日表示
実はカテゴリ機能
多言語
実はユーザ機能
ソースその内公開
動作環境メモ
php-5.1.6 with PDO
SQLite-3.3
IE6
FireFox-1.5
RSS
非認証

検索
Google