这是使用 Eclipse CDT、MinGW 和 msys for C++ 设置当前(截至 2013 年 7 月 2 日)GNU bignum 库的正确过程。要搞定这个,你应该以前用过Unix或Linux,还有Windows,你应该对编程和编译程序有一个模糊的回忆。这是一个多星期的研究和顽固挫折的高潮,所以如果我把事情搞砸了,请礼貌地记下,否则我会用我的思想把你炸死!
1) 我假设你已经下载并安装了 Eclipse 和 MinGW,并且已经将 msys 安装到了 MinGW。你必须在 msys 之前安装 MinGW!
2) 将 GMP 库的压缩包从 gmplib.org 下载到 ${gmp_download}。我下载了 gmp-5.1.2.tar.xz,因为我从来没有使用过 lzip,也不知道它是否在 msys 中可用。
3) 打开一个 msys 窗口(本质上是一个 bash shell)。cd ${gmp_buid} 和 tar -Jxvf ${gmp_download}/gmp-xxxtar.xz
这些 tar 选项与您在网络上其他地方可能找到的不同!-Jxvf 适用于 xz(我认为是 lzip),但对于 gzip,您使用 -xzvf。
4) cd gmp-xxx 并运行 ./config.guess。写下输出。接下来你将需要它。
5) 运行 ./configure --prefix=${gmp_build} --build=<config.guess output> --enable-cxx --with-gnu-ld
显然,如果您没有明确告诉 GMP 为您的平台构建,它会构建所有内容,这很糟糕。cxx 选项构建 C++ 库,并且 --with-gnu-ld 允许它与 ld 一起使用。很简单。
6) 制作
7) 进行安装
例如:假设您安装到 C:/gmp。你应该有 gmp/include/gmp.h 和 gmpxx.h。您还应该有 gmp/lib/libgmp.a、libgmp.la、libgmpxx.a、libgmpxx.la。您还应该有一个包含内容的共享目录。
8)设置日食:
- 转到项目-> 属性
- 在 C/C++ build --> Environment 下编辑 PATH 变量并添加 ${gmp_build}/include;${gmp_build}/lib
- 在 C/C++ build --> settings --> tool settings --> GCC Assembler --> general 添加 ${gmp_build}/include 作为包含路径。
- 相同的地方但 --> GCC C++ 编译器 --> 包含添加 ${gmp_build}/include 作为包含路径。
- 相同的地方 --> GCC C++ 编译器 --> Miscellaneous 添加 -lgmp -lgmpxx 到该行的 END。线的尽头!
- 相同的地方 --> GCC C 编译器添加与以前相同的包含路径和其他选项。
- 相同的地方 --> MinGW C++ 链接器 --> 库 按该顺序将gmpxx和gmp添加到“库 (-l)”中!现在将 ${gmp_build}/lib 添加到“库搜索路径 (-L)”
- 在 C/C++ General --> Paths & Symbols --> Incudes 选项卡下,检查您的包含目录中是否有 ${gmp_build}/include 用于 Assembly、C 和 C++。如果他们不在那里,请添加他们。它们可能已经由 Eclipse 填充。
- 相同的地方 --> 库选项卡检查你是否有gmp和gmpxx在那个顺序。它应该已经被填充。
- 相同的地方 --> 库路径选项卡检查应该已经存在的 ${gmp_build}/lib。
- 点击“应用”并确保重建索引,否则更改将不会进行。点击确定关闭。
9) 运行这个小程序来验证你的设置:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <gmp.h>
#include <gmpxx.h>
using namespace std;
int main ()
{
mpz_t p;
mpz_init_set_ui (p,3);
return 0;
}
您的编译命令应类似于以下内容:
g++ "-IC:\gmp\include" -O0 -g3 -Wall -c -fmessage-length=0 -lgmp -lgmpxx -o main.o "..\main.cpp"
g++ "-LC:\gmp\lib" -o GMPDebug.exe main.o -lgmpxx -lgmp
笔记:
1)选项的顺序很重要。我不知道所有原因,但如果第二个命令行(链接程序)在 -o 选项之前有 -lgmp -lgmpxx 标志,则链接将失败。
2) -l 标志是一个棘手的标志。它实际上是说“去看看 -L<whatever> for liblibrary.a”。在这种情况下,“在 C:\gmp\lib 中查找 libgmp.a 和 libgmpxx.a”。
3) 我听说过涉及 cout 和 64 位版本的 eclipse 的错误,所以我使用的是 32 位版本,在那里我看到了同样的错误。:-(
4) 如果在链接器中将 gmp 放在 gmpxx 之前,则重载的运算符将不起作用。