最近C#转型C++了(因为winform开发的程序太太太容易被破解了,以及我越来越对执行效率关注了),,花费了不少时间,,雀氏啊,,让我越学,越感觉自己会的还是太少太少,,
记录一下吧,,这个问题我作为C++新手,百度了两天了都,离谱的解决不了,就离谱,,,给我整的都快自闭了,,
开发软件:Visual Studio 2019
开发环境:Windows 10 64位
一、下载libcurl源代码
libcurl的官方网站是 https://curl.haxx.se/
找到里面的Download菜单里面下载最新源码
二、解压并准备编译源码
解压curl-8.0.1.zip到方便的英文目录下(最好还是不要有中文)
这是目录结构
以管理员身份运行一下buildconf.bat批处理
在开始菜单中找到Visual Studio 2019文件夹,
如果你想要编译64位则右击x64 Native Tools Command Prompt for VS 2019,
编译32位则右击x86 Native Tools Command Prompt for VS 2019,
右键选择->更多->管理员方式运行。
这里我编译x64版本的,所以我选择x64 Native Tools Command Prompt for VS 2019
切换到你解压的curl-8.0.1文件夹内,进入到winbuild文件夹里,然后复制当前路径
在x64 Native Tools Command Prompt for VS 2019里输入cd命令然后再按一下空格 再粘贴刚刚复制的路径,按回车执行
三、编译源码
VS2019 x64 静态编译debug版:
命令行输入:nmake /f Makefile.vc mode=static VC=19 MACHINE=x64 DEBUG=yes
如果想使用动态编译,将mode=static改为mode=dll。(本文仅教静态编译,同时curl官方也不建议使用动态编译)
如果使用x86,将MACHINE=x64改为MACHINE=x86(这时候得需要使用x86 Native Tools Command Prompt for VS 2019)。
如果需要release版,将DEBUG=yes改为DEBUG=no。
VC取值6,7,8,9,10,11,12,14,15,19
vc6 – VC6.0
vc7 – VS2002
vc7.1 – VS2003
vc8 – VS2005
vc9 – VS2008
vc10 – VS2010
vc11 – VS2012
vc12 – VS2013
vc13 – VS2014
vc14 – VS2015
vc15 – VS2017
vc19 – VS2019
输入完之后,
回车开始编译,编译完成后builds目录会生成的.lib
builds目录就在你解压的目录下面,
我所圈的是我们所需要的,另外两个是编译所产生的中间产物,可忽略不管
四、将编译产物放入到VS项目中
我们复制 include和lib目录,粘贴到我们的项目的根目录中去
1、因为我们编译的时候设置的编译条件就是x64位且是debug模式,所以我们要用这个模式进行运行
2、把.h和lib包含到工程
选择左边VC++ 目录,在右边包含目录添加$(ProjectDir)\include;
3、库目录添加$(ProjectDir)\lib;,$(ProjectDir)是项目目录的变量,在这个项目的值就是:,这样即使移动工程到不同文件夹也不会受影响
4、本项目静态编译,所以需要将CURL_STATICLIB
添加至工程。选择C/C++->预处理器->预处理器定义:添加CURL_STATICLIB
(或者 BUILDING_LIBCURL;HTTP_ONLY)
5、添加其它需要的库
链接器->输入->附加依赖项:添加libcurl_a_debug.lib;msvcrt.lib;Ws2_32.lib;Wldap32.lib;winmm.lib;Crypt32.lib;Normaliz.lib;
这个libcurl_a_debug.lib(是编译生成的lib目录下面的lib的文件名)
6、最后点击应用并确定就行
五、测试curl请求
可以写代码测试了
#include <iostream> #include<curl/curl.h> int main() { printf("test printf %s\r\n", "abc123"); CURL* curl = nullptr; CURLcode res; curl = curl_easy_init(); if (curl != nullptr) { curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com"); /* example.com is redirected, so we tell libcurl to follow redirection */ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); /* 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); } }
测试可用,可以愉快的去爬虫了,但貌似只限制http,如果要https的话还得需要再弄个openssl,这个稍后写…
给大家提供一下我编译的x64和x86的debug和release静态库文件和头文件,可以直接拿着用
参考链接:
评论抢沙发