1

Win 7 64 マシンで gcc 4.7.2 および gmp 5.0.5 で CodeBlocks を使用しています。gmpxx の使用を開始した後、+、-、etc 演算子では発生せず、mp*_class 変数を計算しようとすると << で発生する奇妙なセグメンテーション違反が発生します。これを除いて、gmpxx はこれまでのところ完全に機能していると言わざるを得ません。

例えば:

#include <iostream>
#include <gmpxx.h>

using namespace std;

int main()
{
    mpz_class c = 21;
    cout << c << endl;
}

以下のコードは正常に動作しますが、cout のある行で segfault が発生します。

#include <iostream>
#include <gmpxx.h>

using namespace std;

int main()
{
    mpz_class a = 3, b = 8, c;
    c = a + b;
    cout << c.get_str() << endl;
}

さらに奇妙なのは、次のコードです。

#include <iostream>
#include <gmpxx.h>

using namespace std;

int main()
{
    mpz_class a = 3, b = 8, c, d = 21;
    c = a + b;
    cout << c.get_str() << endl;
    cout << d << endl;
}

実行時にセグメンテーション違反は発生しませんが、最初の結果 (11) のみを表示してから正常に終了します。一方、デバッグでは、cout << d << endl でセグメンテーション違反が発生します。

私はここ数日間グーグルで検索しましたが、オーバーロードされた演算子の一部だけが機能していないことに似たものは何も見つかりませんでした.

説明をいただければ幸いです。

次のようなコードブロックで 2 つの gmp ライブラリをリンクしました: Settings->Compiler and Debugger->Global Compiler Settings->Linker Settings そしてそこに追加しました: C:\mingw\lib\libgmpxx.dll.a および C:\mingw \lib\libgmp.dll.a (この順)。

gmpxx を使用して C++ コードをコンパイルするには、他に何も必要ありませんでした。

最後に、私の CodeBlocks ビルド ログは次のようになります。

g++.exe -pg -g -pg -g -c "C:\Temp\test.cpp" -o .objs\test.o

g++.exe -o test.exe .objs\test.o -pg -lgmon -pg -lgmon C:\mingw\lib\libgmpxx.dll.a C:\mingw\lib\libgmp.dll.a

なぜそれぞれに2つのスイッチがあるのか​​ 正直わかりません。

さらに情報が必要な場合は、喜んで提供します。ありがとうございました。

4

1 に答える 1

1

では、これを回答済みとしてマークします。実際のところ、私は mingw-get を介して gmp をインストールしましたが、Googleland のほぼすべての場所で、独自のシステム用に自分でビルドするように記載されています。ばかげた間違いであり、@ Lol4t0 のコメントのおかげで、現在は正常に動作しています。だから、私のようなすべての新しい人のために:

1) MSYS で MinGW をインストールする

2) gmp ソースをダウンロードし、mingw\msys\1.0\home\ のフォルダーに抽出します。

3) mingw シェルを開き、gmp フォルダーに移動します。

4) ./configure --enable-cxx --prefix=/home/newgmpinstall

5) 作る

6) インストールする

7) チェックを入れる

OK とチェックされた場合、newgmpinstall で、システムで動作するヘッダー gmp.h と gmpxx.h とライブラリ libgmp.a と libgmpxx.a が見つかります。

必要に応じて、それらを新しいフォルダーに移動できます。次に、IDE プロジェクト プロパティで、*.a ファイルをリンク ライブラリに追加し、*.h ファイルを含むフォルダーをコンパイラ検索ディレクトリに追加します。

コードを書く

注: 最初は、M4 パッケージが見つからなかったため、M4 が見つからないというエラーで ./configure が終了しました。M4 のソースをダウンロードし、最初に M4 に対して上記の手順を実行してから、gmp をインストールします。

于 2012-11-08T00:35:20.607 に答える