【网络通讯】libcurl编译相关补充

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库的一点经验分享

  1. 版本:编译之前一定要确保上面编译的版本对应你实际使用的VS版本号
  2. 编码:生成软件版本之前,一定要注意自己的项目编码与静态库(libcurl_a.lib)的编码是对应的。
  3. 编译lib库和引用lib库选项不一致情况
    1)、一个lib库采用“多线程 DLL (/MD)”配置,而另外一个项目采用“多线程(/MT)”编译配置
    2)、一个lib库采用“使用 Unicode 字符集”配置,而另外一个项目采用“使用多字节字符集”编译配置
    3)、一个lib库采用选择“release 版本 ”配置,而另外一个项目采用选择 “debug 版本 ”编译配置
    4)、一个lib库采用“wind32平台 ”配置,而另外一个项目采用“wind64平台 ”编译配置
  4. 没有添加指定预编译宏
    在使用curl静态库时,却遇到了编译链接错误:
    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
    
    解决方法是,在自己的项目属性中添加一个预编译宏,CURL_STATICLIB。

所以,为了避免上述问题的产生,我们在使用第三方库时,一定要检查下面步骤:

  1. 引用第三方库时,确认lib库是否使用相同编译平台
  2. 确认编译选项是否一致。比如运行时库和字符集
  3. 若需要则添加指定编译宏
  4. 添加附加库目录和附加依赖项

04、小结

上面的内容就是我这次解决编译、生成版本遇到的问题,所总结的一点小经验,大家如果也遇到了这些问题,是可以借鉴、试着搞搞、排除一下的。

版权声明:技术分享类文章,欢迎转载!

猜你喜欢

转载自blog.csdn.net/m0_43458204/article/details/116706891