zoukankan      html  css  js  c++  java
  • OpenSSL静态库编译及使用(linux环境)

    转载需注明来源:http://www.cnblogs.com/yczcc/p/7594322.html

    openssl官网:https://www.openssl.org

    下载源码

    源码地址为:https://www.openssl.org/source/old/;当前最新版本为 1.1.0f,https://www.openssl.org/source/old/1.1.0/openssl-1.1.0f.tar.gz

    源码编译

    解压之后,进入源码目录openssl-1.1.0f,执行如下命令。因为只需要编译静态库,也没有特殊要求,所以使用的编译选项配置很简单:

    ./config -fPIC no-shared
    make
    

    其中,-fPIC:指示生成位置无关的代码,这个选项是在把openssl生成的静态库链接到动态库的时候提示错误添加的;no-shared:指示生成静态库。

    最终在当前目录下会编译出libssl.a和libcrypto.a两个库文件,在开发的时候只需要包含头件并链接这两个库就可以了。

    开发使用

    有一点需要注意的是编译生成的库libssl.a和libcrypto.a存在依赖关系,要把libssl.a放在libcrypto.a前面,不然可能出现未定义的错误。库的头文件在openssl-1.1.0f/include/openssl目录中。

    将openssl-1.1.0f/include/openssl目录拷贝到自己模块的头文件目录(./inc)下,将libssl.a和libcrypto.a静态库拷贝到自己模块的库文件目录(./lib)下,在makefile中添加头文件目录和lib库:

    INCLUDE += ******** -I./inc
    LIB += ******* -L./lib -lssl -lcrypto

    在使用openssl库函数时,添加如下头文件(按需添加)即可:

    #include <openssl/bio.h>
    #include <openssl/ssl.h> 
    #include <openssl/err.h>
    

    附录:

    关于openssl的编译选项的解读:

    全局选项

    第一类是全局性选项:

    --openssldir=OPENSSLDIR 安装目录,默认是 /usr/local/ssl 。

    --prefix=PREFIX 设置 lib include bin 目录的前缀,默认为 OPENSSLDIR 目录。

    --install_prefix=DESTDIR 设置安装时以此目录作为"根"目录,通常用于打包,默认为空。

    zlib
    zlib-dynamic
    no-zlib 使用静态的zlib压缩库、使用动态的zlib压缩库、不使用zlib压缩功能。

    threads
    no-threads 是否编译支持多线程的库。默认支持。

    shared
    no-shared 是否生成动态连接库。

    asm
    no-asm 是否在编译过程中使用汇编代码加快编译过程。

    enable-sse2
    no-sse2 启用/禁用SSE2指令集加速。如果你的CPU支持SSE2指令集,就可以打开,否则就要关闭。

    gmp
    no-gmp 启用/禁用GMP库

    rfc3779
    no-rfc3779 启用/禁用实现X509v3证书的IP地址扩展

    krb5
    no-krb5 启用/禁用 Kerberos 5 支持

    ssl
    no-ssl
    ssl2
    ssl3
    no-ssl2
    no-ssl3
    tls
    no-tls 启用/禁用 SSL(包含了SSL2/SSL3) TLS 协议支持。

    dso
    no-dso 启用/禁用调用其它动态链接库的功能。[提示]no-dso仅在no-shared的前提下可用。

    [提示]为了安装Apache的mod_ssl成功,SSLv2/SSLv3/TLS都必须开启。

    算法选项

    第二类用于禁用crypto目录下相应的子目录(主要是各种算法)。虽然理论上这些子目录都可以通过"no-*"语法禁用,但是实际上,为了能够最小安装libcrypto,libssl,openssl,其中的大部分目录都必须保留,实际可选的目录仅有如下这些:

    no-md2,no-md4,no-mdc2,no-ripemd 这些都是摘要算法,含义一目了然。

    no-des,no-rc2,no-rc4,no-rc5,no-idea,no-bf,no-cast,no-camellia 这些都是对称加密算法,含义一目了然。"bf"是"Blowfish"的意思。

    no-ec,no-dsa,no-ecdsa,no-dh,no-ecdh 这些都是不对称加密算法,含义一目了然。

    no-comp 数据压缩算法。因为目前实际上并没有压缩算法,所以只是定义了一些空接口。

    no-store 对象存储功能。

    更多细节可以查看 crypto/store/README 文件。

    转载需注明来源:http://www.cnblogs.com/yczcc/p/7594322.html

  • 相关阅读:
    iOS9 News 应用
    swift中,Optional、?与!之间的关系
    [翻译] CotEditor
    [book] iOS 8 Swift Programming Cookbook
    便利的操作plist文件
    消除 Xcode7 中 directory not found for option 'xxxx' 警告
    点击单个cell高度变化的动画效果
    [翻译] LiquidFloatingActionButton
    一脸懵逼学习Zookeeper(动物园管理员)---》高度可靠的分布式协调服务
    一脸懵逼学习基于CentOs的Hadoop集群安装与配置(三台机器跑集群)
  • 原文地址:https://www.cnblogs.com/yczcc/p/7594322.html
Copyright © 2011-2022 走看看