在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.dll 和 libgmp-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是不一样的,不能混着用。
浙公网安备 33010602011771号