1

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

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

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

4

1 回答 1

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) 进行安装

7) 进行检查

如果检查正常,那么在 newgmpinstall 中,您将找到适用于您的系统的头文件 gmp.h 和 gmpxx.h 以及库 libgmp.a 和 libgmpxx.a。

如果您愿意,可以将它们移动到新文件夹。然后在您的 IDE 项目属性中将 *.a 文件添加到您的链接库,并将带有 *.h 文件的文件夹添加到编译器搜索目录。

编写代码

注意:起初 ./configure 退出时出现关于缺少 M4 的错误,因为我缺少 M4 包。只需下载 M4 的源代码并首先为 M4 执行上述步骤,然后安装 gmp。

于 2012-11-08T00:35:20.607 回答