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


3.14 Autoconf

Autoconfを利用するアプリケーションは,GMPがインストールされているかどうかを簡単に確認できます。気をつけなればいけないのは,Version 3以降のGMPライブラリのシンボル(関数名,変数名など)は__gmpzというような接頭詞を持つようになっている,ということです。従って,下記のようなテストを行うことになります。

AC_CHECK_LIB(gmp, __gmpz_init)

この例では,GMPの有無を調べるデフォルトのAC_CHECK_LIB の動作を利用しています。GMPが不可欠のアプリケーションの場合は,GMPが見つからない場合にエラーを吐くようにしたい訳です。

AC_CHECK_LIB(gmp, __gmpz_init, ,
  [AC_MSG_ERROR([GNU MP not found, see https://gmplib.org/])])

特定バージョンのGMPかどうかを確認したい時には,下記のようにして,そのバージョンで使用できる関数の一つを指定すれば良いわけです。例えば,mpz_mul_si関数は GMP 3.1で追加されましたので,下記のように指定します。

AC_CHECK_LIB(gmp, __gmpz_mul_si, ,
  [AC_MSG_ERROR(
  [GNU MP not found, or not 3.1 or up, see https://gmplib.org/])])

他の方法としては,AC_EGREP_CPPを利用してgmp.hに記述してあるバージョン番号を調べることでも実現できます。この方が,サブマイナーリリース番号まで,正確なバージョン確認ができます。

新しいGMPは新しい機能を提供していますので,アプリケーション作成時には新しいGMPを利用しましょう。

アプリケーションが望むのは,設定時やプリプロセス時におけるデータ型のサイズであって,実行時のsizeofの値ではありません。これはmp_limb_t型を使えば済む話で,GMP 4.0以降では最良の方法です。以前のバージョンでは,long long型のリムを使用してるシステム上では‘-D’オプションが必要とされていました。

AC_CHECK_SIZEOF(mp_limb_t, , [#include <gmp.h>])