• 交叉编译curl,实现c++的http post


    0. 环境


    虚拟机ubuntu18(已经安装好aarch64-linux-gnu-编译工具)
    目标板子是arm64
    参考[1]建议ubuntu 通过apt install curl,然后查看curl稳定版本。

    1. $ curl -V
    2. curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.1 zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3

    1. 准备源码

    opensslhttps://www.openssl.org/source/openssl-1.1.1q.tar.gz
    zlib https://sourceforge.net/projects/libpng/files/zlib/ zlib-1.2.11.tar.gz
    curl https://curl.se/download.htmlcurl 7.58.0.tar.gz

      

    2. 交叉编译openssl

    解压

    1. $ tar -zvxf openssl-1.1.1q.tar.gz 
    2. $ cd openssl-1.1.1q
    3. $ ./config --prefix=/home/xxjianvm/workspace/ext/install -fPIC no-shared no-asm --cross-compile-prefix=aarch64-linux-gnu- && sed -i 's/-m64//g' Makefile
    4. $ make -j8 && make install

    3. 交叉编译zlib

    zlib的configure不支持CC参数,因此需要export一下。

    1. $ tar -xvf zlib-1.2.11.tar.gz && cd zlib-1.2.11
    2. $ export CC=aarch64-linux-gnu-gcc
    3. $ ./configure --prefix=/home/xxjianvm/workspace/ext/install
    4. $ make -j8 && make install

    4. 交叉编译curl

    1. $ tar -xvf curl-7.58.0.tar.gz && cd curl-7.58.0
    2. $ ./configure --enable-static --prefix=/home/xxjianvm/workspace/ext/install --with-ssl=$WORK_DIR/ext/install --host=arm-linux CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++
    3. $ make -j8 && make install

       

    5. 测试


    5.1 添加引用

    #include       // http post


    5.2 函数实现

    1. int HttpLocalDnn()
    2. {
    3.     CURL* curl = NULL;
    4.     CURLcode res;
    5.     curl = curl_easy_init();
    6.     if(curl == NULL)
    7.     {
    8.         return CURLE_FAILED_INIT;
    9.     }
    10.     struct curl_slist* headerlist = NULL;
    11.     // 设置表头,表头内容可能不同
    12.     headerlist = curl_slist_append(headerlist, "Content-Type:application/x-www-form-urlencoded");
    13.     curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
    14.     // 设置URL
    15.     curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.1.102:8383/api");
    16.     // 设置为Post
    17.     curl_easy_setopt(curl, CURLOPT_POST, 1);
    18.     curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "hello");
    19.     // 发送
    20.     res = curl_easy_perform(curl);
    21.     if(res != CURLE_OK)
    22.     {
    23.         // 获取详细错误信息
    24.         char* szErr = (char*)curl_easy_strerror(res);
    25.         fprintf(stderr, "curl_easy_perform() failed: %s\n", szErr);
    26.     }
    27.     // 清空
    28.     curl_easy_cleanup(curl);
    29.     // 释放表头
    30.     curl_slist_free_all (headerlist);
    31.     return 0;
    32. }

    参考[1]:curl源码编译安装,https://blog.csdn.net/peng314899581/article/details/88845213
    参考[2]:[转]C++ 使用 curl 进行 http 请求(GET、POST、Download)的封装,https://www.cnblogs.com/lyggqm/p/11450555.html
     

  • 相关阅读:
    JAVA:实现PrimeFactorization质因数分解算法(附完整源码)
    Wissen Onkel kochen.Et eveniet tenetur inventorEnim a consectetur voluptas.e.
    【Unity实战100例】Unity幸运大转盘之概率可控
    并发数计算方法
    北京优秀律师事务所排名(前十名权威推荐)
    网络安全阶段一学习笔记
    面试灵活拷问:对于数据库的索引,你是怎么理解的?
    数字人IP为何成家电品牌年轻化营销黑马?
    PHP基于原生GD库, 获取图片中文字颜色, 匹配稀有度
    springmvc复习(第一天)(黑马版)
  • 原文地址:https://blog.csdn.net/qq_27158179/article/details/126761792