在windows下编译gmp库

编译gmp库

下载gmp源码,https://gmplib.org/ 当前版本为6.2.0,下载后解压即可。

下载msys2,安装到自定义目录。

配置msys2的pacman包管理命令下载程序时的镜像地址(提高下载速度)。进入msys2的安装目录:

编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686

编辑 /etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64

编辑 /etc/pacman.d/mirrorlist.msys ,在文件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch

然后执行 pacman -Syu 以及 pacman -Su刷新设置

msys2安装后有三个命令窗口程序,分别是msys2、mingw32、mingw64 。它们之间的区别好像是运行时的系统路径不一样,具体区别没弄太懂,反正就用mingw64.exe启动终端窗口,提供一个可以执行configure、make等操作的终端即可。

将解压后的gmp源码复制到msys2的安装目录的home目录中,打开mingw64.exe终端。执行以下命令:

pacman -Ss gcc 		#查看gcc相关的包信息
pacman -S mingw-w64-x86_64-gcc		#安装mingw
pacman -S make
pacman -S m4			#执行configure的过程中需要

注意,我第一次安装gcc时执行的命令是 pacman -S msys/gcc ,结果编译出来的库文件不能工作,可能还是需要mingw-gcc 。

利用cd指令进入到gmp源码目录,按下面4条指令依次执行:

./configure --disable-static --enable-shared
#得到的信息为 
#  Version:           GNU MP 6.2.0
#  Host type:         x86_64-w64-mingw32
#  ABI:               64
#  Install prefix:    /home/GmpBuild
#  Compiler:          gcc
#  Static libraries:  yes
#  Shared libraries:  no

make
make check
make install

上述步骤执行完毕后,会在.libs文件夹中出现 libgmp-10.dlllibgmp-3.dll.def这两个文件。将 libgmp-3.dll.def重命名为 libgmp-10.def

找到VS安装目录下的lib.exe,将其添加到系统环境变量的PATH中。我的电脑上lib.exe的路径在: D:\Program_Files\MicroSoft_VS_Professional_2017\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64

打开win10资源管理器,进入到gmp安装目录的.lib文件夹,按住shift鼠标右击空白处,选择在此处打开powershell 。在powershell中输入命令 lib /def:libgmp-10.def /out:libgmp-10.lib,回车执行。然后,libgmp-10.lib就会出现在.libs目录中,libgmp-10.lib是libgmp-10.dll的导入库。使用的时候,把libgmp-10.lib链接上,将libgmp-10.dll和编译得到的.exe可执行文件放在一起,exe就可以正常运行gmp中的函数功能了。

上面描述的是生成gmp动态库的过程,要想生成静态库的话,只需在上述步骤中执行configure过程中有所改动。执行:

./configure --enable-static --disable-shared --prefix=/home/GmpBuild

生成的头文件gmp.h/home/GmpBuild/include中,静态库文件libgmp.a/home/GmpBuild/lib中。注意,生成静态库和生成动态库这两个过程中产生的头文件gmp.h是不一样的,不能混着用。

posted @ 2020-08-18 20:36  小单1202  阅读(1049)  评论(0)    收藏  举报