背景
根据工作项目需求,在Qt程序中需要使用curl库来实现,记录下window环境的编译步骤。整体逻辑是比较清晰的,但有个别坑必须记录,纪念下,也希望帮到其他人!!
具体环境
目前使用的是Qt5.12.6,msvc2017-32位编译器,将编译成该环境下的静态库。考虑业务需求,这里没有使用OpenSSL。其它环境类比即可。
实现步骤
一、下载curl源码
直接使用命令下载,git clone https://github.com/curl/curl.git 。可能提示unable to access的错误,GitHub的网络速度都懂的,多尝试几次一般就可以了。下载好的文件目录如下
二、生成VS工程
1.进入源码根目录的projects文件夹,执行generate批处理文件生成VS工程,此时弹出一个小黑窗,等待执行完即可,不需要操作
2.批处理执行完,进入当前目录的Windows目录,很多版本,这里打开VC15文件夹(对应VS2017)
3.找到cur-all.sln的文件在VS2017中打开即可
4.打开工程后要进行一些设置,选择LIB RELEASE WIN32配置,然后重定解决方案
5.这里设置libcurl工程的编译属性,上面的curl工程忽略。配置为静态库类型
6.设置运行库为 多线程MT(代表静态库release版本)。
7.设置完毕,右键点击生成等待编译结束
8.收工,编译好的静态库已经躺在对应文件夹下了
库的使用
编译过程还是很简单的,有点坑人的地方来了。就是不能以为把这个静态库包含你的工程中就行了,还有其它的设置,还有其它库的依赖,不解决的话,包含到你代码工程中编译就一直报错无法解析的外部符号。。,花了半上午时间终于定位了问题,完美运行。
怎么把三方库添加到工程中等操作就不叙述了,这属于基本功。只说下注意项,很重要!!!
1.预处理器需要添加 CURL_STATICLIB
2.添加生成的库 libcurl.lib 还需要添加 ws2_32.lib wldap32.lib这两个依赖库,不然仍然编译报错
3.以上三步在VS2017中测试代码就可以运行起来了,但是如果是QtCreator中还需要再添加两个库advapi32.lib winmm.lib 都添加上才能运行起来
以上说的库,一般可以在本机找到,复制出来即可。但需要注意32还是64位