CodeBlocks与gmp,segfault与<<运算符和mp * _class

时间:2012-11-07 18:56:27

标签: c++ io codeblocks gmp

我在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>

老实说,我不知道为什么每个都有两个开关。

如果您需要更多信息,我很乐意提供。谢谢。

1 个答案:

答案 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。