c++程序使用GMP库
c++ program using GMP library
我已经按照网站http://www.cs.nyu.edu/exact/core/gmp/上的说明安装了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手册。
您没有正确使用lib。我不知道你是否可以直接访问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为c++设置当前(截至2013年7月2日)GNU bignum库的正确过程。要理解这一点,您应该以前使用过Unix或Linux,以及Windows,并且您应该对编程和编译程序有一个模糊的回忆。这是一个多星期的研究和硬核挫折的高潮,所以如果我搞砸了什么,请礼貌地记录下来,否则我会用我的思想的力量把你炸了!
我假设您已经下载并安装了Eclipse和MinGW,并在MinGW中安装了msys。您必须在安装msys之前安装MinGW !
从gmplib.org下载GMP库的tarball到${gmp_download}。我下载了gmp-5.1.2.tar。
因为我从未使用过lzip,不知道msys中是否可用。打开msys窗口(本质上是一个bash shell)。cd ${gmp_build} and tar -Jxvf ${gmp_download}/gmp-x.x.x.tar.xz
这些tar选项与你在网上其他地方找到的不同!-Jxvf适用于xz(我认为是lzip),但对于gzip,你可以使用- xxvf。
cd gmp-x.x。然后运行。/config.guess。写下输出。
-
运行./configure——prefix = $ {gmp_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。libgmp。洛杉矶,libgmpxx。libgmpxx.la。你还应该有一个文件共享目录
设置eclipse:
- 进入项目->属性
- 在C/c++ build -->环境下编辑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。到终点了!
- 相同的位置-> GCC C编译器添加相同的包含路径和杂项选项。
- 相同位置-> MinGW c++链接器-> Libraries按顺序将gmp和gmpxx添加到Libraries (-l)中!现在添加${gmp_build}/lib到"库搜索路径(-L)"
- Under C/c++ General -> Paths &Symbols --> includes选项卡检查在汇编、C和c++的include目录中是否有${gmp_build}/include。如果他们不在那里,你可能把之前的步骤搞砸了。它们应该由Eclipse自动填充。
- 相同位置-> Libraries选项卡检查gmp和gmpxx的顺序。它应该已经被填充。
- Same Place -> Library Paths选项卡检查${gmp_build}/lib,它应该已经存在了。点击"应用",确保你重建了索引,否则修改将无效。点击OK关闭。
运行这个小程序来验证你的设置:
#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:gmpinclude" -O0 -g3 -Wall -c -fmessage-length=0 -lgmp -lgmpxx -o main.o "..main.cpp" g++ "-LC:gmplib" -o GMPDebug.exe main.o -lgmp -lgmpxx
指出:
选项的顺序很重要。我不知道所有的原因,但是如果第二个命令行(链接程序)在-o选项之前有-lgmp -lgmpxx标志,那么链接将失败。
-l标志是一个棘手的。它实际上是说"在-L中查找library。a"在这种情况下,"去C:gmplib中查找libgmp。"a and libgmpxx.a".
我听说过涉及cout和64位版本eclipse的bug,所以我使用32位版本,在那里我看到了同样的bug。: -)
由于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
Run: ./gmp_pow_test
在Ubuntu上安装gmp库:sudo apt-get install libgmp-dev libgmpxx4ldbl
你需要告诉编译器你想要使用哪些库。
g++ -lgmp -lgmpxx file.cpp -o file
可能已经太迟了,没有什么用了,但是…
首先,你的程序工作得很好。正如其他人指出的那样,您需要(a)确保安装了GMP库(包括其gmpxx扩展和所有相关文件),并且(b)您告诉编译器在哪里可以找到包含文件和要链接的库。在我的例子中,include文件在/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- test产生的结果:
$ ./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"
安装完成后,From start打开MinGW安装管理器
- 选择所有的基础-然后在"MinGW"下选择要安装的所有GMP库 <
- 申请更改/gh>
之后你将安装JDK,然后添加"C:Program FilesJavajdk1.8.0_121bin"PATH系统变量
安装Eclipse后进入:
- GCC c++编译器——>在 行末尾添加-lgmp -lgmpxx
- MinGW c++链接器——>添加到"Libraries (-l)"gmp和gmpxx在该顺序
gooooo。
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 程序崩溃并显示"std::out_of_range"错误
- 在学校电脑上运行GMP程序
- 将C++程序转换为使用 GMP
- c++程序使用GMP库