Build GMP on 64bit Windows

一、MSYS2 環境搭建html

1.一、安裝c++

  msys2 的主頁地址:算法

       http://www.msys2.org/shell

  下載32位或64位,我這裏 下載了64位bootstrap

    msys2-x86_64-20161025.exebash

  雙擊傻瓜式安裝app

 

1.二、更新軟件包dom

  開始菜單->MSYS2 64bit->MSYS2 MinGW 32-bitui

    剩下的工做都在這個bash shell下進行atom

  查看軟件包清單

$  pacman -Sl | grep gcc

mingw32 mingw-w64-i686-gcc 6.2.0-2 [已安裝]
mingw32 mingw-w64-i686-gcc-ada 6.2.0-2
mingw32 mingw-w64-i686-gcc-fortran 6.2.0-2
mingw32 mingw-w64-i686-gcc-libgfortran 6.2.0-2 [已安裝]
mingw32 mingw-w64-i686-gcc-libs 6.2.0-2 [已安裝]
mingw32 mingw-w64-i686-gcc-objc 6.2.0-2
mingw64 mingw-w64-x86_64-gcc 6.2.0-2
mingw64 mingw-w64-x86_64-gcc-ada 6.2.0-2
mingw64 mingw-w64-x86_64-gcc-fortran 6.2.0-2
mingw64 mingw-w64-x86_64-gcc-libgfortran 6.2.0-2
mingw64 mingw-w64-x86_64-gcc-libs 6.2.0-2
mingw64 mingw-w64-x86_64-gcc-objc 6.2.0-2
msys gcc 5.3.0-3 [已安裝]
msys gcc-fortran 5.3.0-3
msys gcc-libs 5.3.0-3 [已安裝]
msys mingw-w64-cross-gcc 5.3.0-1

    安裝gcc

$ pacman -S mingw-w64-i686-gcc

警告:mingw-w64-i686-gcc-6.2.0-2 已經爲最新 -- 從新安裝
正在解決依賴關係...
正在查找軟件包衝突...

軟件包 (1) mingw-w64-i686-gcc-6.2.0-2

所有安裝大小: 112.18 MiB
淨更新大小: 0.00 MiB

:: 進行安裝嗎? [Y/n] Y
(1/1) 正在檢查密鑰環裏的密鑰 [#####################] 100%
(1/1) 正在檢查軟件包完整性 [#####################] 100%
(1/1) 正在加載軟件包文件 [#####################] 100%
(1/1) 正在檢查文件衝突 [#####################] 100%
(1/1) 正在檢查可用硬盤空間 [#####################] 100%
:: 正在處理軟件包的變化...
(1/1) 正在從新安裝 mingw-w64-i686-gcc [#####################] 100%

    查看gcc安裝狀況

$ gcc -v
Using built-in specs.
COLLECT_GCC=C:\msys64\mingw32\bin\gcc.exe
COLLECT_LTO_WRAPPER=C:/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/6.2.0/lto-wrapper.exe
Target: i686-w64-mingw32
Configured with: ../gcc-6.2.0/configure --prefix=/mingw32 --with-local-prefix=/mingw32/local --build=i686-w64-mingw32 --host=i686-w64-mingw32 --target=i686-w64-mingw32 --with-native-system-header-dir=/mingw32/i686-w64-mingw32/include --libexecdir=/mingw32/lib --enable-bootstrap --with-arch=i686 --with-tune=generic --enable-languages=c,lto,c++,objc,obj-c++,fortran,ada --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-time=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-isl-version-check --enable-lto --enable-libgomp --disable-multilib --enable-checking=release --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-libiconv --with-system-zlib --with-gmp=/mingw32 --with-mpfr=/mingw32 --with-mpc=/mingw32 --with-isl=/mingw32 --with-pkgversion='Rev2, Built by MSYS2 project' --with-bugurl=https://sourceforge.net/projects/msys2 --with-gnu-as --with-gnu-ld --disable-sjlj-exceptions --with-dwarf2
Thread model: posix
gcc version 6.2.0 (Rev2, Built by MSYS2 project)

 

    安裝make

$ pacman -S make
警告:make-4.2.1-1 已經爲最新 -- 從新安裝
正在解決依賴關係...
正在查找軟件包衝突...

軟件包 (1) make-4.2.1-1

所有安裝大小:  1.22 MiB
淨更新大小:  0.00 MiB

:: 進行安裝嗎? [Y/n] Y
(1/1) 正在檢查密鑰環裏的密鑰                       [#####################] 100%
(1/1) 正在檢查軟件包完整性                         [#####################] 100%
(1/1) 正在加載軟件包文件                           [#####################] 100%
(1/1) 正在檢查文件衝突                             [#####################] 100%
(1/1) 正在檢查可用硬盤空間                         [#####################] 100%
:: 正在處理軟件包的變化...
(1/1) 正在從新安裝 make                            [#####################] 100%

    查看make安裝狀況

$ make -v
GNU Make 4.2.1
爲 x86_64-pc-msys 編譯
Copyright (C) 1988-2016 Free Software Foundation, Inc.
許可證:GPLv3+:GNU 通用公共許可證第 3 版或更新版本<http://gnu.org/licenses/gpl.html>。
本軟件是自由軟件:您能夠自由修改和從新發布它。
在法律容許的範圍內沒有其餘保證。

 

二、編譯GMP

  2.一、下載gmp

    https://gmplib.org/

Download the latest release of GMP
GMP 6.1.2    lz, 1939430 bytes    xz, 1946336 bytes    bz2, 2386766 bytes
Main site, gmplib.org, via https    gmp-6.1.2.tar.lz    gmp-6.1.2.tar.xz    gmp-6.1.2.tar.bz2
USA, ftp.gnu.org, via https    gmp-6.1.2.tar.lz    gmp-6.1.2.tar.xz    gmp-6.1.2.tar.bz2

    我這裏下載了gmp-6.1.2.tar.xz版本

  2.二、進入bash shell

    開始菜單->MSYS2 64bit->MSYS2 MinGW 32-bit

  2.三、解壓

    進入到gmp-6.1.2.tar.xz目錄

$ tar -xvf gmp-6.1.2.tar

  2.四、編譯

    進入到gmp-6.1.2解壓的目錄

$ cd gmp-6.1.2/

    configure

$ ./configure

    make

  2.五、生成的庫文件位置

    .libs 目錄下

    libgmp.a

三、VS使用

  3.一、如何使用gmp

    拷貝libgmp.a和gmp.h到工程目錄下

#include <gmp.h>
#pragma comment(lib, "libgmp.a")
#pragma comment(lib, "libgcc.a")

    這裏須要把libgcc.a連接進來,位置在C:\msys64\mingw32\lib\gcc\i686-w64-mingw32\6.2.0目錄中

  3.二、示例,生成兩個素數p,q

#include "stdafx.h"
#include <gmp.h>
#pragma comment(lib, "libgmp.a")
#pragma comment(lib, "libgcc.a")

int _tmain(int argc, _TCHAR* argv[])
{
    gmp_randstate_t grt;  
    gmp_randinit_default(grt); //設置隨機數生成算法爲默認  
    gmp_randseed_ui(grt, time(NULL));   //設置隨機化種子爲當前時間,這幾條語句的做用至關於標準C中的srand(time(NULL));  

    mpz_t key_p, key_q;  
    mpz_init(key_p);  
    mpz_init(key_q);    //一個mpz_t類型的變量必須在初始化後才能被使用  

    mpz_urandomb(key_p, grt, 1024);  
    mpz_urandomb(key_q, grt, 1024); //隨機生成一個在0~2^1024-1之間的隨機數  

    if(mpz_even_p(key_p))  
        mpz_add_ui(key_p, key_p, 1);  
    if(mpz_even_p(key_q))  
        mpz_add_ui(key_q, key_q, 1);    //若是生成的隨機數爲偶數,則加一  

    while(!mpz_probab_prime_p(key_p, 25) > 0)  //逐個檢查比p大的奇數是否爲素數  
        mpz_add_ui(key_p, key_p, 2);  
    while(!mpz_probab_prime_p(key_q, 25) > 0)  
        mpz_add_ui(key_q, key_q, 2);  

    gmp_printf("%ZX\n", key_p);   //以十六進制的形式輸出生成的素數  
    gmp_printf("%ZX\n", key_q);    

    return 0;
}
相關文章
相關標籤/搜索