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;
    }

      

  • 相关阅读:
    POJ 1015 Jury Compromise【DP】
    POJ 1661 Help Jimmy【DP】
    HDU 1074 Doing Homework【状态压缩DP】
    HDU 1024 Max Sum Plus Plus【DP,最大m子段和】
    占坑补题。。最近占的坑有点多。。。
    Codeforces 659F Polycarp and Hay【BFS】
    Codeforces 659E New Reform【DFS】
    Codeforces 659D Bicycle Race【计算几何】
    廖大python实战项目第四天
    廖大python实战项目第三天
  • 原文地址:https://www.cnblogs.com/qintangtao/p/7200386.html
Copyright © 2011-2022 走看看