我在Win 7 64计算机上使用CodeBlocks和gcc 4.7.2以及gmp 5.0.5。 在开始使用gmpxx之后,我看到一个奇怪的段错误,它不会出现在+, - ,等运算符中,但是<<当试图cout一个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&lt;&lt; d&lt;&lt; ENDL。
我在过去几天用谷歌搜索过,发现没有任何类似于某些的重载运算符无效。
我会感谢你的解释。
我在代码块中链接了两个gmp库,如下所示: 设置 - &gt;编译器和调试器 - &gt;全局编译器设置 - &gt;链接器设置 在那里我添加了: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 < / p>
老实说,我不知道为什么每个都有两个开关。
如果您需要更多信息,我很乐意提供。谢谢。
答案 0 :(得分:1)
好的,是时候将此标记为已回答。事实上,我通过mingw-get安装了gmp,而googleland几乎无处不在,它指出自己为自己的系统构建它。一个愚蠢的错误,感谢@ Lol4t0的评论,它现在运作正常。 所以像我这样的新人:
1)使用MSYS安装MinGW
2)下载gmp源码并解压到mingw \ msys \ 1.0 \ home \
中的某个文件夹3)打开mingw shell并导航到gmp文件夹
4)./configure --enable -cxx --prefix = / home / newgmpinstall
5)制作
6)make install
7)进行检查
如果检查正常,那么在newgmpinstall中你会找到gmp.h和gmpxx.h的头文件以及适用于你系统的库libgmp.a和libgmpxx.a。
如果您愿意,可以将它们移动到新文件夹。然后在IDE项目属性中将* .a文件添加到链接库,将带有* .h文件的文件夹添加到编译器搜索目录。
编写代码
注意:首先./configure退出时出现M4缺失错误,因为我错过了M4包。只需下载M4的源代码,然后先为M4执行上述步骤,然后再安装gmp。