Windows下编译并使用64位GMP

简介: Windows下编译并使用64位GMP

Windows下编译并使用64位GMP

目录

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. 参考

  1. windows搭建gcc开发环境(msys2)
  2. C/C++编译器gcc的windows版本MinGW-w64安装教程
  3. 如何在windows下编译GMP软件包
  4. 如何在vc中使用mingw编译出来的动态库和静态库

分类: C++

标签: VS , GCC , GMP


相关文章
|
5月前
|
Linux 编译器 数据安全/隐私保护
Windows10 使用MSYS2和VS2019编译FFmpeg源代码-测试通过
FFmpeg作为一个流媒体的整体解决方案,在很多项目中都使用了它,如果我们也需要使用FFmpeg进行开发,很多时候我们需要将源码编译成动态库或者静态库,然后将库放入到我们的项目中,这样我们就能在我们的项目中使用FFmpeg提供的接口进行开发。关于FFmpeg的介绍这里就不过多说明。
256 0
|
5月前
|
Unix 编译器 开发者
Qt5.14.2 轻松掌握Qt中的压缩与解压缩:QuaZIP的神秘面纱与实战演练之windows环境编译
Qt5.14.2 轻松掌握Qt中的压缩与解压缩:QuaZIP的神秘面纱与实战演练之windows环境编译
578 0
|
20天前
|
并行计算 开发工具 异构计算
在Windows平台使用源码编译和安装PyTorch3D指定版本
【10月更文挑战第6天】在 Windows 平台上,编译和安装指定版本的 PyTorch3D 需要先安装 Python、Visual Studio Build Tools 和 CUDA(如有需要),然后通过 Git 获取源码。建议创建虚拟环境以隔离依赖,并使用 `pip` 安装所需库。最后,在源码目录下运行 `python setup.py install` 进行编译和安装。完成后即可在 Python 中导入 PyTorch3D 使用。
|
2月前
|
监控 机器人 Unix
GoLand——windows下如何编译Linux二进制文件
GoLand——windows下如何编译Linux二进制文件
47 1
GoLand——windows下如何编译Linux二进制文件
|
2月前
|
C++ Windows
Windows下编译64位CGAL
Windows下编译64位CGAL
74 0
|
5月前
|
计算机视觉 Windows
OpenCV + CLion在windows环境下使用CMake编译, 出现Mutex相关的错误的解决办法
OpenCV + CLion在windows环境下使用CMake编译, 出现Mutex相关的错误的解决办法
229 0
|
5月前
|
前端开发 Unix 开发工具
windows使用cygwin编译Xyce
windows使用cygwin编译Xyce
70 0
|
5月前
|
Java 数据库连接 数据库
Windows7 64位 连接Access数据库“未发现数据源名称并且未指定默认驱动程序“的解决办法
Windows7 64位 连接Access数据库“未发现数据源名称并且未指定默认驱动程序“的解决办法
951 0
|
5月前
|
开发工具 git C++
libevent-windows VS2019-cmake 编译笔记
本文主要本文主要记录个人在使用window10使用cmake编译libevent遇到了一点小问题,这里就简单的记录一下,给cmake编译项目不熟悉的朋友一点帮助记录个人在使用window10使用cmake编译libevent遇到了一点小问题,这里就简单的记录一下,给cmake编译项目不熟悉的朋友一点帮助
131 0
|
13天前
|
边缘计算 安全 网络安全

相关课程

更多