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つのスイッチがあるのか 正直わかりません。
さらに情報が必要な場合は、喜んで提供します。ありがとうございました。