我在Win 7 64机器上使用gcc 4.7.2和gmp 5.0.5的CodeBlocks。开始使用gmpxx后,我看到一个奇怪的段错误,该错误不会在+,-,etc运算符中发生,但在尝试退出mp * _class变量时会出现在例如:#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 我已经搜索了最近两天,没有发现什么与仅某些无法正常工作的重载操作符相似。谢谢您的解释。我将两个gmp库链接成如下代码块:设置->编译器和调试器->全局编译器设置->链接器设置并在此添加: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.og++.exe -o test.exe .objs\test.o -pg -lgmon -pg -lgmon C:\mingw\lib\libgmpxx.dll.a C:\mingw\lib\libgmp.dll.a老实说,我不知道为什么每个都有两个开关。如果您需要更多信息,我们将很高兴为您提供。谢谢。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 好了,是时候将其标记为已回答。事实是,我通过mingw-get安装了gmp,而在googleland的几乎所有地方,它都指出要为自己的系统自己构建它。一个愚蠢的错误,感谢@ Lol4t0的评论,它现在可以正常工作了。因此,对于像我这样的所有新手: 1) Install MinGW with MSYS 2) Download gmp source and extract to some folder in mingw\msys\1.0\home\ 3) open mingw shell and navigate to gmp folder 4) ./configure --enable-cxx --prefix=/home/newgmpinstall 5) make 6) make install 7) make check如果检查正常,则在newgmpinstall中,您将找到标题gmp.h和gmpxx.h以及适用于您系统的库libgmp.a和libgmpxx.a。您可以根据需要将它们移动到新文件夹。然后在IDE项目属性中,将* .a文件添加到链接库中,并将带有* .h文件的文件夹添加到编译器搜索目录中。写代码注意:首先,由于缺少M4软件包,。/ configure退出并出现有关M4的错误。只需下载M4的源代码,然后首先对M4执行上述步骤,然后安装gmp。 (adsbygoogle = window.adsbygoogle || []).push({}); 09-26 05:54