Windows下编译并使用64位GMP
2020-03-16 05:44:53来源:博客园 阅读 ()
Windows下编译并使用64位GMP
详细论述了在Windows下编译并使用GMP的过程。目录
- 1. 概述
- 2. 编译
- 2.1. GCC环境
- 2.2. 编译过程
- 3. 使用
- 3.1. 调用
- 3.2. 示例
- 4. 参考
1. 概述
GMP是一个开源的数学运算库,它可以用于任意精度的数学运算,包括有符号整数、有理数和浮点数,是进行大数运算比较好的选择。
需要说明的是,在Windows环境下编译GMP库不是很容易的一件事情,如果可以的话,还是找一下已经编译好的库文件直接调用。GMP是C语言编写的库,在接口方面是比较稳定的,理论上是甚至能够做到跨语言调用。
2. 编译
2.1. GCC环境
GMP库只提供了一个Makefile文件,这意味着需要GCC环境的支持。在Windows下使用GCC就需要MinGW了,但是MinGW是支持32位编译的,如果要编译64位的话,就得使用MinGW-w64了。MinGW-w64是MinGW的升级版本(MinGW已经不更新了),能够编译64位和32位。但是,没错还有但是只有MinGW-w64是没办法编译Makefile文件的,单独的MinGW-w64环境只能自己一个个编译链接源代码。编译Makefile文件需要安装msys2,msys2可以在Windows下搭建一个类linux环境,里面不仅集成了MinGW-w64,还可以包括bash、vim、gcc、make等工具包。
所以知道这里面有多绕了吧?要编译GMP只需要下载msys2就行了,当初我可是把MinGW、MinGW-w64都下载尝试了一遍。当然使用msys2也是有坑的,msys2的工具包需要在线下载,地址在国外的工具包下载很慢,这个时候就需要更换国内数据源才行。其中的具体的安装过程可以参考文章结尾出的文献[1],记得一定要安装gcc和make。
2.2. 编译过程
在msys2中配置好gcc和make工具包之后,启动工作目录下的msys2环境。在msys2安装目录下有msys2.exe和mingw64.exe两个启动入口,可以都试试,看是否支持make指令,理论上两者都是可以使用的:
启动msys2环境后,通过CD命令进入到GMP的源代码目录,依次输入如下指令:
./configure
make
make install
就可以编译出静态包,如果需要动态库,那么可以把第一条指令修改为:
./configure --disable-static --enable-shared
这里建议使用动态库。
3. 使用
3.1. 调用
另外一个头痛的问题就是mingw编译出来的静态库后缀名为.a,编译出来的动态库的导入库后缀名为.dll.a,而在Windows下一般使用.lib的来作为静态库或者动态库的导入库。好在VS中是能够识别.a文件作为导入库的,像加载.lib一样加载dll.a即可:
#pragma comment(lib, "libgmp.dll.a")
注意使用动态库时,单独运行时可能会提示缺少dll,libgmp.dll还依赖了mingw中的一些运行时库,根据提示找到相应的dll即可。
3.2. 示例
在VS环境中设置好动态库环境,使用实例代码如下:
#include <iostream>
#include "gmp.h"
using namespace std;
int main()
{
//计算2的1000次方
{
size_t a = 1;
for (int i = 0; i < 1000; i++)
{
a *= 2;
}
cout << "2^1000 = " << a << endl;
}
{
mpz_t a, b, c, d;
mpz_init(a);
mpz_init(b);
mpz_init(c);
mpz_init(d);
//计算2的1000次方
mpz_init_set_ui(a, 2);
mpz_pow_ui(c, a, 1000);
gmp_printf("c = %Zd\n", c);
}
//大数运算
{
mpz_t b, c, d;
mpz_init(b);
mpz_init(c);
mpz_init(d);
//计算12345678900987654321*98765432100123456789
mpz_init_set_str(b, "12345678900987654321", 10);//10进制
mpz_init_set_str(c, "98765432100123456789", 10);
mpz_mul(d, b, c);
gmp_printf("d = %Zd\n", d);
mpz_clear(b);
mpz_clear(c);
mpz_clear(d);
}
return 0;
}
以上演示了使用大数幂运算和乘法运算的过程,运行结果如下:
最后附上我编译的GMP地址。
4. 参考
- windows搭建gcc开发环境(msys2)
- C/C++编译器gcc的windows版本MinGW-w64安装教程
- 如何在windows下编译GMP软件包
- 如何在vc中使用mingw编译出来的动态库和静态库
原文链接:https://www.cnblogs.com/charlee44/p/12502119.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:c++ 中的智能指针
- C++ 在名称空间中使用using声明和using编译指令 2020-05-29
- 1.ffmpeg、ffplay、ffprobe命令使用 2020-05-11
- C++ 单独编译 2020-05-10
- 关于使用ffmpeg的一些牢骚 2020-05-08
- windows7 + Qt(MSVC2017) + VS2019安装配置 2020-04-25
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash