参考: https://blog.csdn.net/cym1990/article/details/79851039
编译
- 从https://github.com/curl/curl下载源码,这里我们选择的是curl-7_65_2;
- 进入到下载的源码文件夹中,双击buildconf.bat文件运行;
- 进入curl文件夹中的“winbuild”文件夹,并复制其文件夹路径,例如:E:\xxxxxxxxxx\curl-curl-7_65_2\winbuild;
- 打开开始菜单,在vs2013下的Visual Studio Tools中,(若要编译64位)选择"适用于 VS 2017 的 x64 本机工具命令提示",(若要编译32位)选择"适用于 VS 2017 的 x86 本机工具命令提示",右键以管理员身份运行,这里我们选择编译32位的;
- 进入vs2013 x86本机工具到命令行中,输入命令: cd /d E:\xxxxxxxxxx\curl-curl-7_65_2\winbuild,进入到此目录;
- 输入编译命令: nmake /f Makefile.vc mode=static VC=12 MACHINE=x86 然后回车,等待编译完成;
- 编译完成后,在build目录下生成相应库文件,库文件包括include、lib、bin三个目录。
注,这里我们编译的是32位的静态库,release版本。
- 若要编译动态库,将“mode=static”改为“mode=dll”。
- 若需要编译debug版,将“DEBUG=no”改为“DEBUG=yes”,DEBUG项未设置时默认为release版本。
- 若需要编译64位版本,将“MACHINE=x86”改为“MACHINE=x64”。
- 若要使用其他版本Visual Studio进行编译,“VC=”后面的数字应该改为该Visual Studio版本。
新建工程进行测试
建一个空的工程,添加如下代码:
#include "include/curl/curl.h"
int main()
{
curl_easy_init();
return 0;
}
并将编译生成的文件夹中的“include”文件夹和“lib”文件夹添加至工程。
将静态库“libcurl_a.lib”添加至工程。
由于我们是静态编译libcurl,需将“CURL_STATICLIB”添加至工程的预处理中。
可能遇到的错误及解决方法:
错误一: 无法解析的外部符号 __imp__curl_easy_init
libcurl没有链接到程序中,找不到这个函数入口。
解决方案:打开项目属性,配置属性 - C/C++ - 预处理器 - 预处理器定义 - 打开下拉框 - 编辑 - 文本框输入CURL_STATICLIB - 保存
(或者在curl.h中#define CURL_STATICLIB)
错误二: 无法解析的外部符号 __imp__CertOpenStore@20
解决方法:在 项目属性 - 链接器 - 输入 - 附加依赖项 中加入: Crypt32.lib 即可。
错误三: 无法解析的外部符号 __imp__IdnToAscii@20
解决方法:在 项目属性 - 链接器 - 输入 - 附加依赖项 中加入:Normaliz.lib 即可。
错误四: 无法解析的外部符号 __imp__WSAStartup@8
无法解析的外部符号 __imp__ldap_init
解决方法:在 项目属性 - 链接器 - 输入 - 附加依赖项 中加入:ws2_32.lib,wldap32.lib 即可。
参考:https://blog.csdn.net/px41834/article/details/81627170