zoukankan      html  css  js  c++  java
  • Ubuntu 12.04LTS下配置OpenSSL和gmp环境

    配置安装OpenSSL:

    1. sudo apt-get install openssl
    2. sudo apt-get install libssl-dev

    编译安装gmp:

    1. 到https://gmplib.org/#DOWNLOAD下载源码压缩包,lz后缀的压缩包Ubuntu默认无法解压,最好下xz后缀的。
    2. 解压到某目录。
    3. Ubuntu默认没有安装g++编译器。输入sudo apt-get install g++安装。
    4. gmp貌似需要依赖m4这个组件,装装装。命令:sudo apt-get install m4
    5. 源码包内有自动make的工具。先输入sudo ./configure --enable-cxx对接下来的make进行自动配置。(在使用configure的时候要加上 --enable-cxx命令,否则不能使用c++库gmpxx.h)
    6. 之后sudo make。自动build开始。
    7. build完成之后,输入sudo make check跑一下测试(可省略,不过自动build过后它会提醒你进行check,说是编译器常常会有漏洞啥的会影响gmp的功能的正确性)
    8. 输入sudo make install安装build完成的gmp库。
    9. 由于安装之后动态链接库都在/usr/local/lib下面,所以需要对/etc/ld.so.conf这个文件进行编辑(文件里面应该是维护了可执行文件开始运行之后,每当它需要用到特定的动态链接库时,它将会搜索的路径)。sudo vim /etc/ld.so.conf打开,在最后一行后面加入/usr/local/lib这个路径。
    10. 输入命令sudo ldconfig对动态库搜索路径进行更新。

    使用库的方法:

    OpenSSL:

    编译时使用gcc或者g++,需要加上-llibssl或者-lcrypto链接选项(根据用到的功能加,如果只用到了OpenSSL的加密那部分组件的功能一般是只需要加-lcrypto)

    示例代码:

    #include <stdio.h>
    #include <openssl/bn.h>
    
    int main() {
            BIGNUM *instance = BN_new();
            BN_init(instance);
            BN_rand(instance, 160, 1, 0);
            BN_print_fp(stdout, instance);
            printf("
    ");
            BN_free(instance);
            return 0;
    }
    

    这里使用了crypto组件里面的bn(bignum)库。编译时输入g++ test_bn.c -lcrypto

    gmp:

    gmp提供c和c++的接口。下面的代码以较为直观的c++大整数类接口为例:

    #include<iostream>
    #include<gmpxx.h>
    using namespace std;
    int main()
    {
        mpz_class a;
        a = 1;
        for(int i = 0; i < 1000; i++)
            a *= 2;
        cout<<"2^1000 = "<<a<<endl;
        //计算-12345*9876543210123456789
        mpz_class b, c;
               b = -12345;
               c = "98765432100123456789";
        cout<<"b * c = "<<b * c<<endl;
        return 0;    
    }

    编译时使用g++ test_gmp.cpp -lgmpxx -lgmp
    注意粗体是需要添加的链接选项,如果使用c的接口,则只需要加-lgmp这个链接选项。



  • 相关阅读:
    BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )
    BZOJ 2134: 单选错位( 期望 )
    BZOJ 1030: [JSOI2007]文本生成器( AC自动机 + dp )
    BZOJ 2599: [IOI2011]Race( 点分治 )
    BZOJ 3238: [Ahoi2013]差异( 后缀数组 + 单调栈 )
    ZOJ3732 Graph Reconstruction Havel-Hakimi定理
    HDU5653 Bomber Man wants to bomb an Array 简单DP
    HDU 5651 xiaoxin juju needs help 水题一发
    HDU 5652 India and China Origins 并查集
    HDU4725 The Shortest Path in Nya Graph dij
  • 原文地址:https://www.cnblogs.com/xt2357/p/4022815.html
Copyright © 2011-2022 走看看