我在 Win 7 64 机器上使用带有 gcc 4.7.2 和 gmp 5.0.5 的 CodeBlocks。在开始使用 gmpxx 后,我看到一个奇怪的段错误,它不会出现在 +、- 等运算符中,但在尝试计算 mp*_class 变量时会出现 <<。我不得不说 gmpxx 到目前为止工作得很好,除了这个。
例如:
#include <iostream>
#include <gmpxx.h>
using namespace std;
int main()
{
mpz_class c = 21;
cout << c << endl;
}
在与 cout 的行上给出一个段错误,而下面的代码工作正常:
#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。
在过去的几天里,我在谷歌上搜索并没有发现任何类似于只有一些重载的运算符不工作的情况。
我会很感激解释。
我在代码块中链接了两个 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
老实说,我不知道为什么每个开关都有两个。
如果您需要更多信息,我很乐意提供。谢谢你。