• 交叉编译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
     

  • 相关阅读:
    PromptScript:轻量级 DSL 脚本,加速多样化的 LLM 测试与验证
    【Javascript】运算符(赋值,算术,自增,自减)
    堆--数组中第K大元素
    【Vuex+ElementUI】Vuex中取值存值以及异步加载的使用
    发布 .NET 7 MAUI / MAUI Blazor 应用到 Windows 应用商店
    CE修改器学习历程之普通变量的保存
    elasticsearch导出和导入数据
    Java 复习笔记 - 字符串篇
    面试阿里P6,却被MySQL难倒,二战阿里,挤进天猫团队(Java岗)
    NVIDIA AGX Xavier 部署 CUDA-PointPillars
  • 原文地址:https://blog.csdn.net/qq_27158179/article/details/126761792