18

この Web サイトの指示に従って 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: no such file or directory と表示されます。どうすればこれを修正できますか? 私はこれが初めてです。そして、私はMinGWを使用しています。

4

7 に答える 7

18

ここで実際のバージョンを入手してくださいGNU GMP Library。/usr/lib にインストールされるように構成してください (構成するには --prefix=/usr を渡します)。

ここにドキュメンテーションがあります: GNU GMP Manual

ライブラリを正しく使用していません。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
于 2013-01-02T18:10:44.633 に答える
8

以下は、現在 (2013 年 7 月 2 日現在) の GNU bignum ライブラリを Eclipse CDT、MinGW、および C++ 用の msys でセットアップするための正しい手順です。これを乗り越えるには、以前に Unix または Linux を使用したことがあり、Windows と同様に使用したことがあり、プログラムのプログラミングとコンパイルについて漠然とした記憶がある必要があります。これは 1 週間以上にわたる調査とハードコアなフラストレーションの集大成です。もし私が何かを台無しにした場合は、丁寧に指摘してください。

  1. すでに Eclipse と MinGW をダウンロードしてインストールし、msys を MinGW にインストールしていると仮定します。msys の前に MinGW をインストールする必要があります。

  2. GMP ライブラリの tarball を gmplib.org から ${gmp_download} にダウンロードします。lzip を使用したことがなく、msys で利用できるかどうかもわからなかったため、gmp-5.1.2.tar.xz をダウンロードしました。

  3. msys ウィンドウ (基本的には bash シェル) を開きます。cd ${gmp_buid} および tar -Jxvf ${gmp_download}/gmp-xxxtar.xz

    これらの tar オプションは、Web 上の他の場所で見つけられるものとは異なります! -Jxvf は xz (そして lzip だと思います) には適していますが、gzip には -xzvf を使用します。

  4. cd gmp-xxx を実行し、./config.guess を実行します。出力を書き留めます。次に必要になります。

  5. ./configure --prefix=${gmp_build} --build= --enable-cxx --with-gnu-ld を実行します

    どうやら、GMP にプラットフォーム用にビルドするように明示的に指示しないと、すべてがビルドされますが、これは悪いことです。cxx オプションは C++ ライブラリをビルドし、--with-gnu-ld は ld と連携できるようにします。かなり簡単です。

  6. 作る

  7. インストールする

    例: C:/gmp にインストールしたとします。gmp/include/gmp.h と gmpxx.h が必要です。gmp/lib/libgmp.a、libgmp.la、libgmpxx.a、libgmpxx.la も必要です。また、その中に何かがある共有ディレクトリも必要です。

  8. 日食をセットアップします。

    • プロジェクトに移動 --> プロパティ
    • C/C++ ビルド --> 環境の下で、PATH 変数を編集し、${gmp_build}/include;${gmp_build}/lib を追加します。
    • C/C++ ビルド --> 設定 --> ツール設定 --> GCC アセンブラー --> 一般の下に、インクルード パスとして ${gmp_build}/include を追加します。
    • 同じ場所ですが --> GCC C++ コンパイラ --> インクルード パスとして ${gmp_build}/include を追加します。
    • 同じ場所 --> GCC C++ コンパイラ --> その他 -lgmp -lgmpxx を行末に追加します。ラインの終わり!
    • 同じ場所 --> GCC C コンパイラ 以前と同じインクルード パスとその他のオプションを追加します。
    • 同じ場所 --> MinGW C++ リンカー --> ライブラリ 「ライブラリ (-l)」に gmp と gmpxx の両方をこの順序で追加します。「ライブラリ検索パス (-L)」に ${gmp_build}/lib を追加します。
    • C/C++ General --> Paths & Symbols --> Incudes タブで、アセンブリ、C、および C++ のインクルード ディレクトリに ${gmp_build}/include があることを確認します。それらがそこにない場合は、前のステップを台無しにした可能性があります。これらは、Eclipse によって自動入力されます。
    • 同じ場所 --> [Libraries] タブで、gmp と gmpxx がその順序で存在することを確認します。すでに入力されているはずです。
    • 同じ場所 --> [ライブラリ パス] タブ ${gmp_build}/lib が既に存在することを確認します。「適用」をクリックして、インデックスを再構築しないと変更が適用されないことを確認してください。[OK] をクリックして閉じます。
  9. この短いプログラムを実行して、セットアップを確認します。

    #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
    

ノート:

  1. オプションの順序は重要です。すべての理由はわかりませんが、2 番目のコマンド ライン (プログラムをリンクする) で -o オプションの前に -lgmp -lgmpxx フラグがある場合、リンクは惨めに失敗します。

  2. -l フラグは扱いにくいものです。実際には、「-L で liblibrary.a を探してください」と表示されます。この場合、「C:\gmp\lib で libgmp.a と libgmpxx.a を探してください」。

  3. cout と 64 ビット バージョンの Eclipse に関連するバグについて聞いたことがあります。そのため、同じバグが発生している 32 ビット バージョンを使用しています。:-)

于 2013-07-03T03:11:16.473 に答える
5

使用するライブラリをコンパイラに伝える必要があります。

g++ -lgmp -lgmpxx file.cpp -o file
于 2013-04-19T09:01:18.327 に答える
3

ヘッダーファイルがどこにあるかをコンパイラに伝える必要があります。

g++ test.cpp -I/path/to/directory/that/contains/the/header -o test.exe
于 2013-01-02T17:29:20.993 に答える