• windows下使用vs2010编译支持https的curl


    一、windows下使用vs2010编译支持https的curl

    1、编译openssl库

    1.1、https依赖ssl,从github下载openssl源码,这里下载的是openssl-1.0.2u版本,地址https://github.com/openssl/openssl/tree/OpenSSL_1_0_2u,下载解压后可以打开INSTALL.W32进行参考。

    1.2、openssl编译依赖perl,需要先下载ActivePerl,可以从官网上下(The Perl Programming Language - www.perl.org),不过好像是在线安装,也可以下载安装离线版

    1.3、下载nasm,官网http://www.nasm.us/,安装后确认nasm.exe在电脑环境变量里,使用汇编编译可以提高openssl效率,不过也可以不安装nasm,直接使用vc编译。

    1.4、新建两个文件夹,E:\code\openssl-1.0.2u-bin\debug,E:\code\openssl-1.0.2u-bin\release

    打开Visual Studio Command Prompt (2010),进入到openssl源码目录,依次执行

    1.4.1)perl Configure VC-WIN32 --prefix=E:\code\openssl-1.0.2u-bin\release

    1.4.2)ms\do_nasm

    1.4.3)nmake -f ms\ntdll.mak

    1.4.4)nmake -f ms\ntdll.mak install

    顺利的话,然后就可以在E:\code\openssl-1.0.2u-bin\release\bin看到生成的libeay32.dll、ssleay32.dll等文件了

    说明:1.4.4.1)如果需要编译debug版,1.4.1执行

    perl Configure debug-VC-WIN32 --prefix=E:\code\openssl-1.0.2u-bin\debug

    1.4.4.1)如果不想用nasm编译汇编,1.4.1&1.4.2执行

    perl Configure VC-WIN32 no-asm --prefix=perl Configure VC-WIN32 --prefix=E:\code\openssl-1.0.2u-bin\release

    ms\do_ms

    3)如果需要编译静态库版,1.4.3&1.4.4里的ntdll.mak换成nt.mak

    2、编译curl

    2.1、从https://github.com/curl/curl下载源码,我下载的是curl 7.86.1版本

    2.2、本文用到了cmake编译,如果没有就下载一个吧,跨平台解决方案生成和编译的好工具。

    2.3、打开cmd,进入到curl源码目录,依次执行

    mkdir build

    cd build

    cmake ../ -G "Visual Studio 10 2010" -DCURL_USE_OPENSSL=ON -DCURL_ENABLE_SSL=ON -DOPENSSL_ROOT_DIR=E:\code\openssl-1.0.2u-bin\debug -DBUILD_TESTING=OFF

    接着可以看到build下生成的vs解决方案,使用vs接着编译即可,如果想生成release版,需要把OPENSSL_ROOT_DIR也改成release版

    3、测试

    第二步生成成功后,打开cmd,切换到curl源码\build\src\Debug目录,分别执行

    curl.exe http://www.baidu.com -i

    curl.exe https://www.baidu.com -i -k

    查看返回的网页内容,其中-k表示关闭ssl证书认证

    二、linux下在3a5000编译支持https的curl

    1、编译openssl库

    1.1、https依赖ssl,从github或openssl官网,这里下载的是openssl-1.1.1w版本(上面的windows是好早以前写的),地址https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz,解压

    1.2、在openssl-1.1.1w外创建一openssl-build目录,进入该目录,依次执行

    test@test-PC:~/code/openssl-build$ ../openssl-1.1.1w/config --prefix=/home/test/code/thirdparty/openssl-1.1.1w/shared

    test@test-PC:~/code/openssl-build$ make -j4

    test@test-PC:~/code/openssl-build$ make install

    2、编译curl

    2.1、从https://github.com/curl/curl下载源码,我下载的是curl 7.60.0版本,解压

    2.2、进入源码目录,执行configure

    ./configure --with-ssl=/home/test/code/thirdparty/openssl-1.1.1w/shared --prefix=/home/test/code/thirdparty/curl-7.61.0

    通过configure的结果确认是否成功开启openssl

    2.3.1、通过cmake编译

    2.3.1.1、编译动态库

    test@test-PC:~/code/curl-7.61.0$ mkdir buildrelease

    test@test-PC:~/code/curl-7.61.0$ cd buildrelease

    test@test-PC:~/code/curl-7.61.0/buildrelease$ cmake ../ -DCMAKE_BUILD_TYPE=Release -DCMAKE_USE_OPENSSL=ON  -DOPENSSL_ROOT_DIR=/home/test/code/thirdparty/openssl-1.1.1w/shared -DBUILD_TESTING=OFF -DCURL_STATICLIB=OFF

    test@test-PC:~/code/curl-7.61.0$ make -j4

    2.3.1.2、编译静态库

    test@test-PC:~/code/curl-7.61.0$ mkdir buildreleasestatic

    test@test-PC:~/code/curl-7.61.0$ cd buildreleasestatic

    test@test-PC:~/code/curl-7.61.0/buildreleasestatic$ cmake ../ -DCMAKE_BUILD_TYPE=Release -DCMAKE_USE_OPENSSL=ON  -DOPENSSL_ROOT_DIR=/home/test/code/thirdparty/openssl-1.1.1w/shared -DBUILD_TESTING=OFF -DCURL_STATICLIB=ON

    test@test-PC:~/code/curl-7.61.0$ make -j4

    至此完成

    2.3.2、通过makefile编译

    test@test-PC:~/code/curl-7.61.0$ make -j4

    test@test-PC:~/code/curl-7.61.0$ make install

    参考:https://blog.csdn.net/delphiwcdj/article/details/23348079

    https://blog.csdn.net/haohaohaihuai/article/details/103968381

    3、测试

    CMakeLists.txt

    1. cmake_minimum_required(VERSION 3.0.0)
    2. project(untitled1 VERSION 0.1 LANGUAGES CXX)
    3. include_directories(
    4. /home/test/code/curl-7.61.0/include/curl
    5. )
    6. add_executable(${PROJECT_NAME} "main.cpp")
    7. target_link_libraries(${PROJECT_NAME}
    8. /home/test/code/curl-7.61.0/buildrelease/lib/libcurl.so
    9. )

    main.cpp

    1. //#include
    2. #include "curl.h"
    3. int main(int argc, char *argv[])
    4. {
    5. CURL *curl = curl_easy_init();
    6. if(curl) {
    7. CURLcode res;
    8. curl_easy_setopt(curl, CURLOPT_URL, "https://baidu.com");
    9. //curl_easy_setopt(curl, CURLOPT_URL, "http://baidu.com");
    10. res = curl_easy_perform(curl);
    11. curl_easy_cleanup(curl);
    12. }
    13. return 0;
    14. }

  • 相关阅读:
    突发公共卫生事件智慧城市数据利用框架构建研究
    在Windows下自己从源码编译Python3.10.13成安装包
    【C语言学习笔记 --- 位段】
    #775 Div.1 B. Integral Array 数学
    npm install卡在sill idealTree buildDeps没有反应,安装失灵
    串行原理编程,中文编程工具中的串行构件,串行连接操作简单
    【初始RabbitMQ】延迟队列的实现
    Spring面试题之循环依赖与三级缓存
    第八章:Springmvc中web.xml配置文件
    idea纯java工程使用gradle指定生成jar的Main-Class,idea生成jar
  • 原文地址:https://blog.csdn.net/dragoo1/article/details/127776987