大整数及高精度浮点运算库GMP的编译及在VS2022下的使用

前言

        在尝试曼德罗曼分形编程时发现需要用到高精度浮点数的计算,在网上查到有个现成的大整数及高精度运算库GMP可以使用,故尝试编译此库的源码,并在VS2022下使用,获得成功。本文记录下这一过程。


一、下载GMP6.3

打开链接The GNU MP Bignum Library

下载gmp-6.3.0.tar.xz,用7-zip解压出tar文件后,再用7-zip解压到指定目录下,本文解压到D:\Fractal\gmp6.3\gmp-6.3.0,(也可以用其他解压工具)

二、安装编译软件MSYS2

安装MSYS2(mingw && gcc

MSYS2官网:https://www.msys2.org/

安装

下载安装程序(官网首页有):msys2-x86_64-20241208.exe ,复制链接用迅雷下载很快,直接下载可能困难

运行安装程序。MSYS2,此处路径设为C:\msys64

(更新包数据库和基础包。从开始菜单运行“MSYS2 UCRT64”。使用以下命令更新其余基本软件包pacman -Syu,本文安装时已是最新文件,未做此步)

现在 MSYS2 已安装好,接下来安装 mingw-w64 GCC :

pacman -S mingw-w64-ucrt-x86_64-gcc

输入Y继续安装

查看gcc 版本:

gcc –version

在power shell下增加路径setx path "%PATH%;C:\msys64\ucrt64\bin" /M,或windows设置里系统信息-高级系统设置里环境变量下载系统变量的path里添加:

从上述安装的模块中,可以看到已包含gmp大数计算包,且版本为6.3,动态库(libgmp-10.dll,libmpfr-6.dll)可以在C:\msys64\ucrt64\bin目录下找到,头文件(gmp.h,gmpxx.h, )可以在C:\msys64\ucrt64\include目录下找到,但静态库libgmp-10.lib文件在C:\msys64\ucrt64\bin下找不到,

本文暂不使用上述库文件,通过以下第三部分自行编译gmp获取库文件

三、编译GMP

编译GMP6.3

3.1,为便于使用,安装系列工具,命令如下:

pacman -S --needed base-devel mingw-w64-x86_64-toolchain,

共52个模块,运行初始及结束的截图:

3.2 GMP的编译

此节讲述了gmp的源码编译过程,便于后续根据不同项目的特点扩充修新的函数。

在msys2 ucrt64窗口下,

cd d:/fractal/gmp6.3/gmp-6.3.0

依次执行:

1)./configure 

2)make

3)make check

4)make install

  成功执行后,生成的h,a文件也复制到了 C:\msys64\ucrt64\lib及include目录下,本文中使用gmp下.libs目录里的,详见第四部分。

3.3,适用于windows的lib和dll文件的生成

分解出.o文件:

ar x libgmp.a

生成dll文件及def文件:

gcc -shared -o libgmp-10.dll *.o -Wl,--export-all-symbols,--output-def,libgmp-10.def

编辑def文件,第一行增加以下语句:LIBRARY libgmp-10.dll,

在ucrt64窗口下下换以下新命令生成def文件,

dlltool -d libgmp-10.def -l libgmp-10.lib

生成的libgmp-10.lib文件大小变为472k,编译成功。

(试过另一个方法,进入windows的dos界面,运行VS2022自带的lib /machine:i386 /def:libgmp-10.def生成的lib 文件只有131k,有问题,导致第4部分使用时编译出错,找不到库函数。)

四,VS下使用gmp

4.1 在需要用gmp的项目下设置如下

4.1.1) 添加头文件

代码中添加gmp.h的含目录的完整文件名如下:

#include "D:\Fractal\gmp6.3\gmp-6.3.0/gmp.h"

4.1.2)静态链接库

项目属性下链接器下的附加库目录里增加lib库的路径D:\Fractal\gmp6.3\gmp-6.3.0/.libs

4.1.3)动态运行库

将libgmp-10.dll文件复制到c:\windows\system32目录下,即可在需要时自动加载

4.2 编译

VS2022下进行编译;

4.3 运行测试

曼德罗曼分形程序运行正常,如下图,其中第一个图是初始图,第二个图是选取了其中一极小区域,且横竖各放大1234亿倍后的图,使用了gmp里的高精度浮点运行函数来计算;


总结

以上是在Windows11下编译GMP6.3,及在VS2022下调用的过程记录,供参考。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值