このウェブサイトの指示に従ってGMPをインストールしました: http://www.cs.nyu.edu/exact/core/gmp/ 次に、ライブラリを使用してサンプルプログラムを探しました:
#include <iostream>
#include <gmpxx.h>
using namespace std;
int main (void) {
mpz_class a, b, c;
a = 1234;
b = "-5678";
c = a+b;
cout << "sum is " << c << "\n";
cout << "absolute value is " << abs(c) << "\n";
cin >> a;
return 0;
}
しかし、コマンドg ++ test.cpp -o test.exeを使用してこれをコンパイルすると、gmpxx.hと表示されます。そのようなファイルやディレクトリはありません。どうすれば修正できますか?私はこれが初めての人です。そして、私はMinGWを使用しています。
ここで実際のバージョンを入手してください GNU GMP Library 。/usr/libにインストールされるように構成してください(構成するには--prefix =/usrを渡します)。
ここにドキュメントがあります: GNU GMP Manual 。
Libを正しく使用していません。 C++関数でmpx値に直接アクセスできるかどうかはわかりませんが、ここでは達成したいことの実際の例を示します。
#include<iostream>
#include<gmp.h>
using namespace std;
int main (int argc, char **argv) {
mpz_t a,b,c;
mpz_inits(a,b,c,NULL);
mpz_set_str(a, "1234", 10);
mpz_set_str(b,"-5678", 10); //Decimal base
mpz_add(c,a,b);
cout<<"\nThe exact result is:";
mpz_out_str(stdout, 10, c); //Stream, numerical base, var
cout<<endl;
mpz_abs(c, c);
cout<<"The absolute value result is:";
mpz_out_str(stdout, 10, c);
cout<<endl;
cin.get();
return 0;
}
コンパイル:
g++ -lgmp file.cpp -o file
gmpライブラリドキュメントには非常に小さな例があるため、参考のためにべき乗の例を含めています:
プログラムは2 ^ 20000を計算します
#include <iostream>
#include <gmp.h>
using namespace std;
int main(void) {
mpz_t result, base;
mpz_inits(result,base,NULL);
mpz_set_str(base, "2", 10);
mpz_pow_ui(result, base, 20000);
mpz_out_str(stdout, 10, result);
return 0;
}
コンパイル:g++ -o gmp_pow_test gmp_pow_test.cpp -lgmp
:./gmp_pow_test
を実行します
次のようにUbuntuにgmpライブラリをインストールします:Sudo apt-get install libgmp-dev libgmpxx4ldbl
現在(7/2/13現在)を設定するための正しい手順を次に示しますGNU Eclipse CDT、MinGW、およびC++用のmsysを使用したbignumライブラリ。これを行うには、以前はUnixやLinux、Windowsを使用していたので、プログラミングとコンパイルプログラムの漠然とした思い出があるはずです。これは、1週間以上の調査とハードコアな欲求不満の集大成です。私の心の力であなたを爆破します!
私は、すでにEclipseとMinGWをダウンロードしてインストールし、Minsysにmsysをインストールしていると想定しています。 msysの前にMinGWをインストールする必要があります!
GMPライブラリのtarballをgmplib.orgから$ {gmp_download}にダウンロードします。 lzipを使用したことがなく、msysで使用できるかどうかもわからなかったため、gmp-5.1.2.tar.xzをダウンロードしました。
Msysウィンドウ(基本的にはbashシェル)を開きます。 cd $ {gmp_buid}およびtar -Jxvf $ {gmp_download} /gmp-x.x.x.tar.xz
これらのtarオプションは、Webの他の場所にあるものとは異なります。 -Jxvfはxz(および私はlzip)に適していますが、gzipには-xzvfを使用します。
cd gmp-x.x.xを実行し、。/ config.guessを実行します。出力を書き留めます。次に必要になります。
./configure --prefix = $ {gmp_build} --build = --enable-cxx --with-gnu-ldを実行します
明らかに、GMPにプラットフォーム用にビルドするように明示的に指示しないと、GMPはすべてをビルドしますが、これは悪いことです。 cxxオプションはC++ライブラリをビルドし、-with-gnu-ldを使用すると、ldで動作します。かなり簡単です。
make
インストールする
EX:C:/ gmpにインストールしたとします。 gmp/include/gmp.hとgmpxx.hが必要です。また、gmp/lib/libgmp.a、libgmp.la、libgmpxx.a、libgmpxx.laも必要です。そこにものを含む共有ディレクトリも必要です。
Eclipseをセットアップします。
この短いプログラムを実行して、設定を確認します。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <gmp.h>
#include <gmpxx.h>
using namespace std;
int main ()
{
mpz_t p;
mpz_init_set_ui (p,3);
return 0;
}
コンパイルコマンドは次のようになります。
g++ "-IC:\gmp\include" -O0 -g3 -Wall -c -fmessage-length=0 -lgmp -lgmpxx -o main.o "..\main.cpp" g++ "-LC:\gmp\lib" -o GMPDebug.exe main.o -lgmp -lgmpxx
ノート:
オプションの順序は重要です。すべての理由はわかりませんが、2番目のコマンドライン(プログラムをリンクする)の-oオプションの前に-lgmp -lgmpxxフラグがあると、リンクが失敗します。
-lフラグは注意が必要です。実際には、「liblibrary.aの-Lを調べてください」と書かれています。この場合、「C:\ gmp\libでlibgmp.aとlibgmpxx.aを探してください」。
Coutと64ビットバージョンのEclipseに関連するバグを聞いたので、同じバグが見られる32ビットバージョンを使用しています。 :-)
使用するライブラリwhatライブラリをコンパイラに通知する必要があります。
g++ -lgmp -lgmpxx file.cpp -o file
役に立つには遅すぎるかもしれませんが...
まず、プログラムは問題なく動作します。他の人が指摘したように、(a)GMPライブラリがインストールされていることを確認する必要があります(そのgmpxx拡張子とすべての関連ファイルを含む)。(b)両方のインクルードファイルの場所をコンパイラに通知している。リンクするライブラリ。私の場合、インクルードファイルは/ opt/local/includeにあり、ライブラリは/ opt/local/lib(Macportsがそれらを配置した場所)にあります。
これがコードです:
#include <iostream>
#include <gmpxx.h>
using namespace std;
int main (void) {
mpz_class a, b, c;
a = 1234;
b = "-5678";
c = a+b;
cout << "sum of " << a << " and " << b << " is " << c << "\n";
cout << "absolute value is " << abs(c) << "\n";
// cin >> a;
return 0;
}
コンパイル/リンクコマンドは次のとおりです。
clang++ -o gmpxx-tst -I/opt/local/include gmpxx-tst.cpp -L/opt/local/lib -lgmpxx -lgmp
Gmpxx-tstを呼び出すと次のようになります。
$ ./gmpxx-tst
sum of 1234 and -5678 is -4444
absolute value is 4444
$
コンパイラにwhereヘッダーファイルがあることを伝える必要があります。
g++ test.cpp -I/path/to/directory/that/contains/the/header -o test.exe