01、VS与VC版本号对应关系
VS版本 | VC版本号 | 发布时间 |
---|---|---|
VS97 | VC = 5 | 1997-02 |
VS6.0 | VC = 6 | 1998-06 |
VS2002 | VC = 7 | 2002-02-13 |
VS2003 | VC = 7.1 | 2003-04-24 |
VS2005 | VC = 8 | 2005-11-07 |
VS2008 | VC = 9 | 2007-11-19 |
VS2010 | VC = 10 | 2010-04-12 |
VS2012 | VC = 11 | 2012-09-12 |
VS2013 | VC = 12 | 2013-10-17 |
VS2015 | VC = 14 | 2015-07-20 |
VS2017 | VC = 15 | 2017-03-07 |
VS2019 | VC = 16 | 2019-04-02 |
02、libcurl静态编译与动态编译
我这里以VS2019为例子,大家实际根据上面对应关系选择对应的版本号。
//静态库,debug,x86
nmake /f Makefile.vc mode=static VC=16 DEBUG=yes MACHINE=x86
//静态库,release,x86
nmake /f Makefile.vc mode=static VC=16 MACHINE=x86
//动态库,debug,x64
nmake /f Makefile.vc mode=dll VC=16 DEBUG=yes MACHINE=x64
//动态库,release,x64
nmake /f Makefile.vc mode=dll VC=16 MACHINE=x64
默认DEBUG是为no的,如果想要支持,则需要手动加上,RELEASE默认是位yes的。
这里知识编译的代码,还有路径设置、盘符设置,请参照上一篇:https://blog.csdn.net/m0_43458204/article/details/116595250
03、关于libcurl库的一点经验分享
- 版本:编译之前一定要确保上面编译的版本对应你实际使用的VS版本号
- 编码:生成软件版本之前,一定要注意自己的项目编码与静态库(libcurl_a.lib)的编码是对应的。
- 编译lib库和引用lib库选项不一致情况:
1)、一个lib库采用“多线程 DLL (/MD)”配置,而另外一个项目采用“多线程(/MT)”编译配置
2)、一个lib库采用“使用 Unicode 字符集”配置,而另外一个项目采用“使用多字节字符集”编译配置
3)、一个lib库采用选择“release 版本 ”配置,而另外一个项目采用选择 “debug 版本 ”编译配置
4)、一个lib库采用“wind32平台 ”配置,而另外一个项目采用“wind64平台 ”编译配置 - 没有添加指定预编译宏:
在使用curl静态库时,却遇到了编译链接错误:
解决方法是,在自己的项目属性中添加一个预编译宏,CURL_STATICLIB。1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_init 1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_setopt 1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_perform 1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_cleanup
所以,为了避免上述问题的产生,我们在使用第三方库时,一定要检查下面步骤:
- 引用第三方库时,确认lib库是否使用相同编译平台
- 确认编译选项是否一致。比如运行时库和字符集
- 若需要则添加指定编译宏
- 添加附加库目录和附加依赖项
04、小结
上面的内容就是我这次解决编译、生成版本遇到的问题,所总结的一点小经验,大家如果也遇到了这些问题,是可以借鉴、试着搞搞、排除一下的。
版权声明:技术分享类文章,欢迎转载!