Windows静态编译libcurl及openssl并配置VS2017开发环境

想用C写一个网页抓取的小工具,上网一查,都说用libcurl比较省事!下载libcurl后发现,原来C语言使用第三方库是需要先编译的!(原谅我没用过C的第三方库,捂脸!)又开始搜索如何编译,网上的教程虽然比较多,但是原创的就那么几篇,都是来回转载。而且大多都是针对旧版的VS和libcurl,坑比较多!经过不断的搜索和反复尝试,终于编译好了,结果发现不支持https…原来还要编译openssl!经过端午假期三天的不断摸索,终于编译好libcurl和openssl并在VS2017开配置好了开发环境!在此记录编译及配置过程!

1. 工具下载

我遇到的大部分坑都是因为网上的方法与我的系统环境和软件版本不一致,所以先列出我的系统及软件版本供大家参考(主要参考openssl及libcurl版本,其他工具版本应该无所谓)!

系统/软件 版本 下载地址
操作系统 Windows 10 专业版 -
Visual Studio 2017 15.7.3 https://www.visualstudio.com/zh-hans/downloads/
openssl openssl-1.1.1-pre7 https://www.openssl.org/source/openssl-1.1.1-pre7.tar.gz
perl v5.24.3 https://www.activestate.com/activeperl/downloads/thank-you?dl=http://downloads.activestate.com/ActivePerl/releases/5.24.3.2404/ActivePerl-5.24.3.2404-MSWin32-x64-404865.exe
libcurl curl-7.60.0 https://curl.haxx.se/download/curl-7.60.0.tar.gz
nasm v2.13.01 http://www.nasm.us/pub/nasm/releasebuilds/2.13.01/win64/nasm-2.13.01-installer-x64.exe

如果你已经安装了VS2017的话,请根据上面的地址依次下载perl、Nasm汇编解释器、openssl、libcurl。

2. 所需工具安装

  • 安装perl -> 双击exe,按照默认选项安装即可,如果安装后在cmd输入perl -v提示不是内部或外部命令的话请将安装目录加入到环境变量
  • 安装nasm -> 双击exe安装即可

3. 开始编译

编译Openssl
  • 解压你下载的openssl到D:\openssl-1.1.1
  • 安装dmake(编译此版本Openssl需要) -> 打开cmd命令行输入ppm install dmake,请耐心等待安装完成,然后关闭cmd窗口!
  • 在开始菜单找到Visual Studio 2017文件夹,点击展开,打开适用于 VS 2017 的 x86 本机工具命令提示,输入cd D:\openssl-1.1.1 && D:切换到你的openssl解压目录。
  • 输入perl Configure no-shared VC-WIN32 --prefix=D:\OpenSSL --openssldir=D:\OpenSSL生成编译配置文件
    其中: no-shared 表示静态编译,VC-WIN32表示编译32位程序
  • 输入nmake开始编译,请等待编译完成…
  • 输入nmake install 将编译完成文件拷贝到指定的D:\OpenSSL,完成后可以将D:\openssl-1.1.1文件夹全部删除了!

至此openssl静态编译完成!
如需清理重新编译可使用nmake clean命令

编译libcurl

将你下载的libcurl下载到D盘根目录,文件夹名称如curl-7.60.0
运行你的宇宙最好用IED VS2017,使用快捷键Ctrl + Shift + O打开项目,选择D:\curl-7.60.0\projects\Windows\VC15\lib\libcurl.sln打开!

下面的步骤有些繁琐,但是请耐心做完!

  1. 点击解决方案”libcurl”下面的libcurl展开,右键点击Resource Files下面的libcurl.rc,选择移除!
  2. 在解决方案”libcurl”下面的libcurl山点击右键 -> 属性!
  3. 在弹出的子窗口,确保配置选项为所有配置,平台为Win32,在左侧配置属性下面的常规选项下,将Widows SDK 版本更改为你的的windows SDK版本,否则编译时会提示SDK不存在!
  4. 点击左侧VC++目录,将你变编译的openssl的include及lib目录分别添加到包含目录和库目录,不要清除原有的,用;隔开。(这一步也要确认左上角配置为所有配置)完成后点击确定!
  5. 切换到LIB Debug - LIB OpenSSL+Win32,右键点击右边的curl选择生成;
  6. 切换到LIB Release - LIB OpenSSL+Win32,再次执行上一步的操作!

至此,你的curllib也编译好了,编译好的文件夹位于D:\curl-7.60.0\build\Win32\VC15,有两个文件夹,在D盘根目录新建文件夹libcurl,并将这两个文件夹过去!
将D:\libcurl\include也复制到D:\libcurl下,之后可以删除D:\curl-7.60.0!

4. 测试编译的curllib

新建项目,选择Windows 控制台应用程序!项目名Test!
在Test点击右键->属性

所有配置下:
  • VC++目录 -> 包含目录加入D:\libcurl\include
  • C/C++下预处理器 -> 加入CURL_STATICLIB
    连接器下的输入 -> 附加依赖项目加入Crypt32.lib;wldap32.lib;ws2_32.lib;libcrypto.lib;libssl.lib;,注意与后面或前面的内容分号隔开!
Debug下:
  • VC++目录 -> 库目录加入 D:\OpenSSL\lib;D:\libcurl\lib\LIB Debug - LIB OpenSSL;
  • 连接器下输入 -> 附加依赖项加入 libcurld.lib;
Release下:
  • VC++目录 -> 库目录加入 D:\OpenSSL\lib;D:\libcurl\lib\LIB Release - LIB OpenSSL;
  • 连接器下输入 -> 附加依赖项加入 libcurl.lib;

点击确定配置完成!
把以下代码复制到 #include "stdafx.h"下方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <curl/curl.h>    

int main(int argc, char* argv[]) {
CURL *curl = 0;
CURLcode res;
curl = curl_easy_init();
if (curl != 0) {
curl_easy_setopt(curl, CURLOPT_URL, "https://www.baidu.com");
/* example.com is redirected, so we tell libcurl to follow redirection */
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
/* always cleanup */
curl_easy_cleanup(curl);
}
getchar();
return 0;
}

运行查看效果,如无报错则配置成功!
如有问题可到我的微博留言交流!
转载请注明出处!

5. 本文参考