我已使用本网站上的说明安装了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。
答案 0 :(得分:15)
在此处获取实际版本GNU GMP Library。确保将其配置为安装在/ usr / lib中(传递--prefix = / usr进行配置)。
这里有文档:GNU GMP Manual。
您没有正确使用lib。我不知道你是否可以直接访问mpx值 使用C ++函数,但是,这里有一个你想要实现的实例:
#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
答案 1 :(得分:6)
这是使用Eclipse CDT,MinGW和msys for C ++设置当前(截至7月2日)GNU bignum库的正确过程。为了解决这个问题,您之前应该使用Unix或Linux,以及Windows,您应该对编程和编译程序有一个模糊的回忆。这是一个多星期的研究和铁杆挫败感的高潮,所以如果我搞砸了一些东西,请用礼貌的方式记下它,否则我会用我的力量打击你!
我假设您已经下载并安装了Eclipse和MinGW,并已将msys安装到MinGW中。您必须在msys之前安装MinGW!
从gmplib.org下载GMP库的tarball到$ {gmp_download}。我下载了gmp-5.1.2.tar.xz,因为我从未使用过lzip,也不知道它是否在msys中可用。
打开一个msys窗口(本质上是一个bash shell)。 cd $ {gmp_buid}和tar -Jxvf $ {gmp_download} /gmp-x.x.x.tar.xz
这些tar选项与您在网络上的其他地方有所不同! -jxvf适用于xz(我认为是lzip),但对于gzip,你使用-xzvf。
cd gmp-x.x.x并运行./config.guess。记下输出。你接下来需要它。
运行./configure --prefix = $ {gmp_build} --build = --enable-cxx --with-gnu-ld
显然,如果您没有明确告诉GMP为您的平台构建,那么它会构建所有内容,这很糟糕。 cxx选项构建C ++库, - with-gnu-ld允许它与ld一起使用。非常简单。
请
make install
EX:假设你安装到C:/ gmp。你应该有gmp / include / gmp.h和gmpxx.h。你还应该有gmp / lib / libgmp.a,libgmp.la,libgmpxx.a,libgmpxx.la。您还应该有一个包含内容的共享目录。
设置eclipse:
运行此简短程序以验证您的设置:
#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标志是一个棘手的标志。它实际上是说“Go-in-lib for liblibrary.a”。在这种情况下,“在C:\ gmp \ lib中查找libgmp.a和libgmpxx.a”。
我听说过涉及cout和64位版eclipse的bug,所以我使用的是32位版本,我看到同样的bug。 : - )
答案 2 :(得分:4)
由于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;
}
编译:{{1}}
运行:g++ -o gmp_pow_test gmp_pow_test.cpp -lgmp
在Ubuntu上安装gmp库,其中包括:./gmp_pow_test
答案 3 :(得分:3)
您需要告诉编译器您要使用的库。
g++ -lgmp -lgmpxx file.cpp -o file
答案 4 :(得分:2)
您需要告诉编译器 头文件是什么。
g++ test.cpp -I/path/to/directory/that/contains/the/header -o test.exe
答案 5 :(得分:2)
有用可能为时已晚,但......
首先,你的程序运行正常。正如其他人所指出的那样,您需要(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;
}
这是compile / link命令:
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
$
答案 6 :(得分:0)
我尝试了很多解决方案,但都存在一些问题
这是安装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之后,转到:
再见。