• Linux C++ 网络编程学习系列(7)——mbedtls编译使用


    mbedtls编译使用

    1. mbedtls源码

    下载地址: https://github.com/ARMmbed/mbedtls/releases
    也可以用git clone, 然后切换到相应版本.

    ing@ubuntu:~/opt$ wget https://github.com/ARMmbed/mbedtls/archive/mbedtls-2.16.5.tar.gz
    ing@ubuntu:~/opt$ tar -xf mbedtls-mbedtls-2.16.5.tar.gz 
    ing@ubuntu:~/opt$ cd mbedtls-mbedtls-2.16.5/
    ing@ubuntu:~/opt/mbedtls-mbedtls-2.16.5$ mkdir build
    ing@ubuntu:~/opt/mbedtls-mbedtls-2.16.5$ cd build/
    ing@ubuntu:~/opt/mbedtls-mbedtls-2.16.5/build$ cmake ..
    ing@ubuntu:~/opt/mbedtls-mbedtls-2.16.5/build$ make
    ing@ubuntu:~/opt/mbedtls-mbedtls-2.16.5/build$ ls include/mbedtls
    aes.h ...
    ing@ubuntu:~/opt/mbedtls-mbedtls-2.16.5/build$ ls library/ -la
    -rw-rw-r-- 1 ing ing 744638 Mar 28 19:32 libmbedcrypto.a
    -rw-rw-r-- 1 ing ing 351816 Mar 28 19:32 libmbedtls.a
    -rw-rw-r-- 1 ing ing 173904 Mar 28 19:32 libmbedx509.a
    
    

    注意:

    1. 这样编译完成之后, 生成include目录下的头文件, 以及library下的.a静态库文件(默认就是静态编译), 也可以生成动态共享库.so
    2. 使用时就用.h和.a文件就好了
    3. 编译完成之后也可以sudo make install, 这样就会把include和library中的.h文件和.a文件分别复制到默认路径/usr/local/include//usr/local/lib/目录下. 这样的话我们就不用每次复制.h和.a文件了, 不过我自己不用这个, 我喜欢哪个项目需要就复制过去, 见下例.

    2. mbedtls库使用

    完整项目示例参见(这个也是cmakelists.txt编写的示例): https://github.com/whuwzp/vim_config/blob/master/test/cmake_example

    cmakelists.txt的多文档组织编写说明: https://www.cnblogs.com/whuwzp/p/cmakefiles.html, https://whuwzp.github.io/LinuxCpp-NetWork-0-makefile学习.md

    项目目录结构:(省略了build目录)

    $ ~/test/cmake_example$ tree
    .
    ├── bin # 生成可执行文件的文件夹
    │   └── main
    ├── CMakeLists.txt # 根目录cmakelists.txt
    ├── hello1 # 子目录1
    │   ├── CMakeLists.txt # 子目录1的cmakelists.txt
    │   ├── hello1.cpp
    │   └── hello1.h
    ├── hello2 # 子目录2
    │   ├── CMakeLists.txt # 子目录2的cmakelists.txt
    │   ├── hello2.cpp
    │   └── hello2.h
    ├── main.cpp # main函数所在源文件, 需要调用hellofunc1和hellofunc2
    └── mbedtls # 第三方库
        ├── include # 第三方库的头文件
        │   └── mbedtls
        │       ├── aes.h # 省略了mbedtls的其他头文件
        │       └── xtea.h
        └── lib # 第三方库的库文件
            ├── libmbedcrypto.a
            ├── libmbedtls.a
            └── libmbedx509.a
    

    其中main.cpp就是复制mbedtls-mbedtls-2.16.5/programs/ssl/ssl_server.c的.

    3. -fPIC

    有需求如下:

    1. 使用静态编译后的mbedtls给我的项目test使用
    2. test最终想要编译为动态链接库,即shared

    如果按照上述方法使用.a文件, 编译test时报错如下:

    libmbedtls.a(ssl_tls.c.o): relocation R_X86_64_PC32 against symbol mbedtls_x509_crt_profile_suiteb  can not be used when making a shared object; recompile with -fPIC 
    

    意思是让重新带上-fPIC编译(自己百度-fPIC的用途)

    于是:

    # add -fPIC
    
    [mbedtls-mbedtls-2.16.5]$ vim CMakeLists.txt
    
    # 在CMAKE_C_FLAGS标识中增加-fPIC
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -W -Wdeclarati    on-after-statement -Wwrite-strings -fPIC")
    
    cmake ..
    make
    # 然后再用.a文件即可
    

    3. 参考网址

    1. mbedtls下载地址: https://github.com/ARMmbed/mbedtls/releases
    2. ssl和tls简明教程: http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
    3. mbedtls官方说明文档: https://tls.mbed.org/high-level-design
  • 相关阅读:
    SQL 语法总结
    终于开始用github了
    前端开发第一阶段总结
    windows系统快捷操作の高级篇
    windows系统快捷操作の进阶篇
    windows系统快捷操作の基础篇
    安装使用ubuntu问题汇总
    十进制转任意进制
    任意进制转10进制
    爬取妹子图(requests + BeautifulSoup)
  • 原文地址:https://www.cnblogs.com/whuwzp/p/mbedtls_make.html
Copyright © 2020-2023  润新知