Next: , Previous: , Up: Installing GMP   [Index]


2.3 バイナリ配布のためのビルドに関する注意

GMPは極力バイナリ配布ファイルの生成に関しては面倒が起きないようにしています。

Libtoolはライブラリのビルドに使用されており,GMP 3.0では‘3:0:0’のように,‘-version-info’で正しくGMPのバージョン番号が設定されるようになります(see Library interface versions in GNU Libtool)。

GMP Version 4ではどのリリースでも,Version 3と上位バイナリ互換になっています。 とはいえ,リリースごとに関数が追加されていますので,libtoolのバージョンチェック機能が 起動時に完璧に働いていないシステムでは,アプリケーション側で,動的リンク可能なバージョンのGMP になっているかどうか,確認する別の機能が必要になるでしょう。

また,libgmpxx.la(--enable-cxxを使った場合, see Build Options) が必要とする同じバージョンのlibgmp.laの存在を確認する機能も 必要になります。というのも,libtoolのバージョンチェックはこの確認作業を 実行しないからです。GMPのバージョン違いはリンカ,もしくはローダで,関数等の 名前解決不可能エラー(unresolved symbols)を発生させることになります。

あるCPUファミリー用にパッケージをビルドする時には,‘--host’ (または‘--build’) オプションを使い,このパッケージを利用することになるCPU間の最小公倍数(LCD)を注意深く 選ばなくてはなりません。例えば,SPARCファミリー用には‘sparc’ (V7を意味します)を このオプションで与えておくことになります。

x86 CPUファミリーには,--enable-fatを使ってファットバイナリを作ることが できるようになります。これにより,最適化された低レベルルーチンを実行時に選択して使うことが できるようになります。x86チップを対象とした広い範囲のパッケージングを行うにはこのオプション が役立ちます。

スピードを重視するのであれば,GMPビルドは正確なCPU型を指定し,使える限りの最適化 手法の中から最高のものを使いたいと思うのが当然です。作り直しの機能もあれば便利 でしょう。このためは‘--build’ (と‘--host’)オプションの指定を無視し, ‘./config.guess’で自動的にCPUの型を探索することができるようします。とはいえ ‘./config.guess’の探索が正確に行えないシステムでは,‘--build’オプション の手動指定を行わなければなりません。

複数ABIを持つシステム上では,パッケージのビルドにおいてどのABIを選ぶのかを決める 必要が出てきます(詳細はABI and ISA参照)。‘./configure’を実行して得られるのは 一つのABI用のバイナリだけです。別のABI用のバイナリが欲しい時には,クリーンにしたディレクトリ ツリー(‘make distclean’)を用意し,もう一度そこで‘./configure’を実行しなければなりません。

“ABI と ISA”の節の注記にもある通り,‘ABI=32’の時は/usr/libに,‘ABI=64’の時は/usr/lib/sparcv9にインストール先をABI毎に自動的に変更するという虫の良い機能はありません。一つのパッケージは‘libdir’ と標準的な場所に,必要に応じて上書きされていくことになります。

gmp.hはビルドによって生成されるファイルなので,CPUアーキテクチャとABIに依存している ものであることを覚えておいて下さい。同時に二つのABIをインストールしようとする時には, アプリケーションのコンパイル時に正しいABIに対応したgmp.hを使うようにしておくことが大事です。 もしコンパイラに対して異なるABIを選べるようにインクルードパスを設定していないのであれば, プリプロセッサが関数や変数をテストしたり,正しいgmp.hを選べるようにするため, /usr/include/gmp.hを生成できるようにしておく必要があります。