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


2.4 特定のシステムにおける注意

AIX 3 と 4

*-*-aix[34]*’上では共有ライブラリがデフォルトでは使用不可になっています。 ネイティブarが利用できないからなのですが,共有ライブラリとしてビルドしたい時には次のようにオプション指定を行います。

./configure --enable-shared --disable-static

--disable-static’が必要になるのは,共有ライブラリビルド時にlibtoolがlibgmp.alibgmp.soへのsymlinkとして生成してしまい, .aしか認識しない古いldが利用できるようになるからです。つまり,不幸にしてフル機能が使えるldでない限りは共有ライブラリの利用が出来ないことになります。

ARM

arm*-*-*’システム上では,GCC 2.95.3以上では符号なし除算に関してバグが存在しており,結果がおかしくなることがあります。GMPの ‘./configure’ではGCC 2.95.4以降であることを要求します。

Compaq C++

Compaq C++ をOSF 5.1上で使用すると,2種類のiostreamが使用でき,一つは標準のもの,もう一つは古い標準のものです(see ‘man iostream_intro’). GMPは前者でしか利用できませんが,不幸にして後者がデフォルトになっていますので,利用する時にはきちんと __USE_STD_IOSTREAMを指定して次のように設定を行います。

./configure --enable-cxx CPPFLAGS=-D__USE_STD_IOSTREAM
浮動小数点演算モード

ハードウェアが直接実行する浮動小数点演算では,特定の演算精度の設定が可能な制御モードが存在するケースがあります。例えば,x86システムにおける,単精度,倍精度,拡張倍精度のようなものです(x87 浮動小数点命令)。double型を使用するGMP関数は,単精度モードではフル精度の保障ができません。この場合はもちろんGMPに限らず,全てのアプリケーションに影響が及びます。

FreeBSD 7.x, 8.x, 9.0, 9.1, 9.2

上記のFreeBSDリリースに含まれるm4は2番目と3番目の引数を無視してくれる評価関数を持っており,.asmファイルを処理するのには向いていません。‘./configure’ではこの問題を見つけてPATHから別のm4を見つけて利用するようになっています。このバグはFreeBSD 9.3と10.0で解決されていますので,OSをアップグレードするかGNU m4を使うようにして下さい。FreeBSDパッケージシステムでは,GNU m4を‘gm4’という名前でインストールしますが,この名前ではGMPは認識しません。

FreeBSD 7.x, 8.x, 9.x

GMP 6.0以降では‘ABI=32’をFreeBSD/amd64 1.0以降の環境ではサポートしません。limits.hが壊れているせいで,GMPが動作しなくなってしまいます。

MS-DOS と MS Windows

MS-DOS上ではDJGPPを使い,MS Windows上ではCygwin, DJGPP, MINGWでGMPをビルドできます。この3つのコンパイラ環境は,いずれもGCCとGNUツールの優れた移植です。

MicrosoftはInterix “Services for Unix”をリリースしており,この環境下でWindows用のGMPをビルドできます(通常の‘./configure’を使う)。但しこれは有料ソフトウェアです。

MS Windows DLL

*-*-cygwin*’, ‘*-*-mingw*’,‘*-*-pw32*’環境下では,オプションなしで実行すると静的ライブラリしかビルドできません。DLLを生成する時には 次のように指定します。

./configure --disable-static --enable-shared

静的ライブラリと動的ライブラリ(DLL)を両方ビルドすることはできず,それぞれに対しては異なるディレクティブを含むgmp.hを使うことになります。

MINGW環境下でビルドしたDLL版GMPはMicrosoft C で利用可能です。Libtoolは.libフォーマットのインポートライブラリを生成しませんので,MSのlibコマンドを使って下記のように生成し,インストールディレクトリにコピーして下さい。libmplibgmpxxに対しても同様にインポートライブラリを生成できます。

cd .libs
lib /def:libgmp-3.dll.def /out:libgmp-3.lib

MINGWはCのランタイムライブラリである‘msvcrt.dll’をI/O用に使いますので,GMPのI/Oルーチンを利用するアプリケーションは必ず‘cl /MD’オプション付きでコンパイルして下さい。これ以外のMS Cのランタイムライブラリが必要な場合,例えばGMPの文字列関数やアプリケーションへのI/Oが必要な場合も,同様にリンクして下さい。

Motorola 68k タイプのCPU

m68k’は68000を意味します。‘m68020’以上のCPUでは更に性能向上が見込めます。 ‘m68360’はCPU32シリーズのCPUです。‘m68302’は“ドラゴンボール(Dragonball)”シリーズのCPUで,これらは全て‘m68000’のCPUファミリーに属します。

NetBSD 5.x

これらのNetBSDのリリースに含まれるm4は2番目と3番目の引数を無視する評価関数が入っており,.asmファイルを処理するには適切ではありません。‘./configure’はこの問題を認識してPATHから使える他のm4を探して適用します。 このバグはNetBSD 6で取れましたので,OSをアップグレードするかGNU m4を利用して下さい。NetBSDのパッケージシステムはGNU m4 を‘gm4’という名前でインストールしますので,GMPが認識できなくなります。

OpenBSD 2.6

このOpenBSDリリースに含まれるm4evalのバグがあり,.asmファイルの処理に向いていません。 ‘./configure’はこの問題に対処するため,PATHが通っている他のm4を見つけて使用します。このバグは OpenBSD 2.7で取れましたので,OSをアップグレードするかGNU m4を利用して下さい。

Power CPU ファミリー

GMPでは,‘power*’ や ‘powerpc*’といったCPUタイプごとに,相互に使用できない命令を使っています。従って,正しいCPUを指定することは大切です。現在のGMP実装では,アセンブラコードで共通に使用できる命令サブセットをサポートしていません。 どちらのCPUタイプでも実行できるようにするには,汎用Cコードを使用し(--disable-assembly), 適切なコンパイラオプション(gcc用には‘-mcpu=common’等)を指定して下さい。 CPU ‘rs6000’ (CPUではなくワークステーションの種別) はconfig.subで利用できますが,これは現状,--disable-assemblyと等価ではありません。

Sparc CPU ファミリー

sparcv8’や‘supersparc’ファミリーは,標準の‘sparc’用のV7コードを高速に実行できます。

Sparc App Regs

32-bit と 64-bit Sparcの両方に対応したGMPのアセンブラコードは, “アプリケーションレジスタ” g2, g3g4を痛めつけます(?)。同様のことはGCCのデフォルトオプションである‘-mapp-regs’を使っても起こります(see SPARC Options in Using the GNU Compiler Collection (GCC))。

このアセンラコードは特別なV9に対するオプション‘-mcmodel=embmedany’ (g4レジスタをデータセグメントのポインタとして利用)にも,これらのレジスタを特別な目的で使用する予定のアプリケーションにも向いていません。 こういう場合はGMPビルド時に --disable-assemblyを指定し,アセンブラコードを使わないようにした方がいいでしょう。

SunOS 4

/usr/bin/m4が入っていないので,.asmファイルの処理ができません。 そのため,‘./configure’は自動的に /usr/5bin/m4を使用するようになっており,大体これで大丈夫かと思います(ダメならGNU m4を使います)。

x86 CPU ファミリー

i586’, ‘pentium’,‘pentiummmx’用のコードはP5 Pentium CPUにも有用ですが,Intel P6クラスのCPUではかえって低速になります(PPro, P-II, P-III). どちらでも使えるバイナリを作りたいのであれば,‘i386’を選択して下さい。

x86 MMX と SSE2用コード

CPUではMMX命令を使用可能でもアセンブラがサポートしていない場合は,警告が出てMMXが使用できません。 低レベルのビルドを行ってMMXコードを適用すれば,標準の整数コードよりも高速に実行できるようになります。同じことはSSE2にも言えます。

古い‘gas’はMMX命令をサポートしておらず,特にFreeBSD 2.2.8やもっと新しいOpenBSD 3.1に入っているversion 1.92.3はダメです。

Solaris 2.6と2.7のasは,movq命令を実行するとレジスターに対して不正なオブジェクトコードを生成してしまいます。従って,MMX命令も使えません。使いたいのであれば,新しいgasをインストールして下さい。


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