Next: Emacs, Previous: Profiling, Up: GMP Basics [Index]
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>])