zoukankan      html  css  js  c++  java
  • Build GMP on 64bit Windows

    1、MSYS2 环境搭建

    1.1、安装

      msys2 的主页地址:

           http://www.msys2.org/

      下载32位或64位,我这里 下载了64位

        msys2-x86_64-20161025.exe

      双击傻瓜式安装

    1.2、更新软件包

      开始菜单->MSYS2 64bit->MSYS2 MinGW 32-bit

        剩下的工作都在这个bash shell下进行

      查看软件包清单

    $  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:msys64mingw32ingcc.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>。
    本软件是自由软件:您可以自由修改和重新发布它。
    在法律允许的范围内没有其他保证。

    2、编译GMP

      2.1、下载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.2、进入bash shell

        开始菜单->MSYS2 64bit->MSYS2 MinGW 32-bit

      2.3、解压

        进入到gmp-6.1.2.tar.xz目录

    $ tar -xvf gmp-6.1.2.tar

      2.4、编译

        进入到gmp-6.1.2解压的目录

    $ cd gmp-6.1.2/

        configure

    $ ./configure

        make

      2.5、生成的库文件位置

        .libs 目录下

        libgmp.a

    3、VS使用

      3.1、如何使用gmp

        拷贝libgmp.a和gmp.h到工程目录下

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

        这里需要把libgcc.a链接进来,位置在C:msys64mingw32libgcci686-w64-mingw326.2.0目录中

      3.2、示例,生成两个素数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
    ", key_p);   //以十六进制的形式输出生成的素数  
        gmp_printf("%ZX
    ", key_q);    
    
        return 0;
    }

      

  • 相关阅读:
    Cannot set property 'branchdata' of undefined
    关闭Vue Eslint语法检查
    Webpack前世今生
    SpringCloud 之 Netflix Hystrix 服务监控
    Spring Cloud 之 Netflix Hystrix 服务容错
    Java设计模式之建造者模式(Builder Pattern)
    Java设计模式之工厂模式(Factory Pattern)
    数据库表的字段有默认值,如何修改或者去掉这个默认值
    前端基础进阶(十五):详解 ES6 Modules
    JS基础知识题(中)作用域、闭包
  • 原文地址:https://www.cnblogs.com/qintangtao/p/7200386.html
Copyright © 2011-2022 走看看