[英]c++ program using GMP library
我已经使用本网站上的说明安装了 GMP: http : //www.cs.nyu.edu/exact/core/gmp/然后我查找了一个使用该库的示例程序:
#include <iostream>
#include <gmpxx.h>
using namespace std;
int main (void) {
mpz_class a, b, c;
a = 1234;
b = "-5678";
c = a+b;
cout << "sum is " << c << "\n";
cout << "absolute value is " << abs(c) << "\n";
cin >> a;
return 0;
}
但是,如果我使用以下命令编译它:g++ test.cpp -o test.exe,它会说 gmpxx.h:没有这样的文件或目录。 我怎样才能解决这个问题? 我对此有点陌生。 我正在使用 MinGW。
在此处获取GNU GMP 库的实际版本。 确保将其配置为安装在 /usr/lib 中(通过 --prefix=/usr 进行配置)。
这里有文档: GNU GMP 手册。
您没有正确使用该库。 我不知道您是否可以使用 C++ 函数直接访问 mpx 值,但是,这里有一个您想要实现的工作示例:
#include<iostream>
#include<gmp.h>
using namespace std;
int main (int argc, char **argv) {
mpz_t a,b,c;
mpz_inits(a,b,c,NULL);
mpz_set_str(a, "1234", 10);
mpz_set_str(b,"-5678", 10); //Decimal base
mpz_add(c,a,b);
cout<<"\nThe exact result is:";
mpz_out_str(stdout, 10, c); //Stream, numerical base, var
cout<<endl;
mpz_abs(c, c);
cout<<"The absolute value result is:";
mpz_out_str(stdout, 10, c);
cout<<endl;
cin.get();
return 0;
}
编译:
g++ -lgmp file.cpp -o file
以下是使用 Eclipse CDT、MinGW 和 msys for C++ 设置当前(截至 2013 年 7 月 2 日)GNU bignum 库的正确过程。 要解决这个问题,您之前应该使用过 Unix 或 Linux,以及 Windows,并且您应该对编程和编译程序有一个模糊的回忆。 这是一个多星期的研究和铁杆挫折的高潮,所以如果我把某些东西搞砸了,请礼貌地记下,否则我会用我的思想力量炸毁你!
我假设您已经下载并安装了 Eclipse 和 MinGW,并且已经将 msys 安装到 MinGW 中。 你必须在 msys 之前安装 MinGW!
将 GMP 库的 tarball 从 gmplib.org 下载到 ${gmp_download}。 我下载了 gmp-5.1.2.tar.xz,因为我从来没有用过 lzip,也不知道 msys 里有没有。
打开一个 msys 窗口(本质上是一个 bash shell)。 cd ${gmp_buid} 和 tar -Jxvf ${gmp_download}/gmp-xxxtar.xz
这些 tar 选项与您可能在网络上的其他地方找到的不同! -Jxvf 适用于 xz(我认为是 lzip),但对于 gzip,您使用 -xzvf。
cd gmp-xxx 并运行 ./config.guess。 写下输出。 接下来你会需要它。
运行 ./configure --prefix=${gmp_build} --build= --enable-cxx --with-gnu-ld
显然,如果您没有明确告诉 GMP 为您的平台构建,它会构建所有内容,这很糟糕。 cxx 选项构建 C++ 库,--with-gnu-ld 允许它与 ld 一起使用。 很简单。
制作
进行安装
例如:假设您安装到 C:/gmp。 你应该有 gmp/include/gmp.h 和 gmpxx.h。 你还应该有 gmp/lib/libgmp.a、libgmp.la、libgmpxx.a、libgmpxx.la。 您还应该有一个包含内容的共享目录。
设置日食:
运行这个简短的程序来验证您的设置:
#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 -lgmp -lgmpxx
笔记:
选项的顺序很重要。 我不知道所有的原因,但是如果第二个命令行(链接程序)在 -o 选项之前有 -lgmp -lgmpxx 标志,链接将失败。
-l 标志是一个棘手的标志。 它实际上说“去 -L 中查找 liblibrary.a”。 在这种情况下,“在 C:\\gmp\\lib 中查找 libgmp.a 和 libgmpxx.a”。
我听说过涉及 cout 和 64 位版本的 eclipse 的错误,所以我使用的是 32 位版本,在那里我看到了相同的错误。 :-)
由于 gmp 库文档中有非常小的示例,因此我包含了求幂示例以供参考:
程序计算 2 ^ 20000
#include <iostream>
#include <gmp.h>
using namespace std;
int main(void) {
mpz_t result, base;
mpz_inits(result,base,NULL);
mpz_set_str(base, "2", 10);
mpz_pow_ui(result, base, 20000);
mpz_out_str(stdout, 10, result);
return 0;
}
编译: g++ -o gmp_pow_test gmp_pow_test.cpp -lgmp
运行: ./gmp_pow_test
使用以下sudo apt-get install libgmp-dev libgmpxx4ldbl
在 Ubuntu 上安装 gmp 库: sudo apt-get install libgmp-dev libgmpxx4ldbl
您需要告诉编译器您要使用哪些库。
g++ -lgmp -lgmpxx file.cpp -o file
现在有用可能为时已晚,但是......
首先,您的程序运行良好。 正如其他人指出的那样,您需要 (a) 确保安装了 GMP 库(包括其 gmpxx 扩展名和所有相关文件),以及 (b) 您告诉编译器在哪里可以找到包含文件,以及要链接的库。 在我的情况下,包含文件在 /opt/local/include 中,而库在 /opt/local/lib 中(Macports 放置它们的位置:)。
这是代码:
#include <iostream>
#include <gmpxx.h>
using namespace std;
int main (void) {
mpz_class a, b, c;
a = 1234;
b = "-5678";
c = a+b;
cout << "sum of " << a << " and " << b << " is " << c << "\n";
cout << "absolute value is " << abs(c) << "\n";
// cin >> a;
return 0;
}
这是编译/链接命令:
clang++ -o gmpxx-tst -I/opt/local/include gmpxx-tst.cpp -L/opt/local/lib -lgmpxx -lgmp
以下是 gmpxx-tst 的调用产生的结果:
$ ./gmpxx-tst
sum of 1234 and -5678 is -4444
absolute value is 4444
$
您需要告诉编译器头文件在哪里。
g++ test.cpp -I/path/to/directory/that/contains/the/header -o test.exe
我尝试了很多解决方案,但都存在一些问题
这里是安装GMP和eclipse的最佳方式
按照此链接http://www.multigesture.net/articles/how-to-install-mingw-msys-and-eclipse-on-windows/
您需要确保此处未提及的以下内容:
安装 MinGW 时选择一个不包含空格的路径,如“c:\\MinGW”
安装后,从开始打开MinGW安装管理器
之后你将安装JDK,然后将“C:\\Program Files\\Java\\jdk1.8.0_121\\bin”添加到PATH系统变量
安装 Eclipse 后转到:
哇哦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.