libcurl第二课编译静态库-创新互联

1 编译libcurl静态库
    确保C/C++页面下代码生成/运行库确保跟解决方案保持一致,确保常规下输出路径和目标文件名称(d)

创新互联公司成立以来不断整合自身及行业资源、不断突破观念以使企业策略得到完善和成熟,建立了一套“以技术为基点,以客户需求中心、市场为导向”的快速反应体系。对公司的主营项目,如中高端企业网站企划 / 设计、行业 / 企业门户设计推广、行业门户平台运营、成都app软件开发成都手机网站制作、微信网站制作、软件开发、成都移动机房等实行标准化操作,让客户可以直观的预知到从创新互联公司可以获得的服务效果。

2 C/C++属性页面中的预处理器属性页设置定义
_DEBUG
BUILDING_LIBCURL
DEBUGBUILD
CURL_STATICLIB
USE_WINDOWS_SSPI
USE_SCHANNEL
USE_WINDOWS_SSPI和USE_SCHANNEL两个预编译处理定义是用来定义HTTPS,为了使用https协议需要指定,切记!

3 调用工程C/C++属性页面中的预处理器属性页设置定义

BUILDING_LIBCURL

CURL_STATICLIB

因为宏定义主要作用于curl/curl.h头文件,用于头文件的宏定义条件编译,必须定义这两个宏定义,否则编译出错,看出错分析

2 链接错误分析
1)error LNK2019: 无法解析的外部符号 __imp__curl_easy_init,该符号在函数 _main 中被引用
分析:不定义CURL_STATICLIB 编译结果,因为CURL_EXTERN CURL *curl_easy_init(void);函数之前有CURL_EXTERN定义,而该定义在
#ifdef CURL_STATICLIB
#  define CURL_EXTERN
#elif defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)
#  if defined(BUILDING_LIBCURL)
#    define CURL_EXTERN  __declspec(dllexport)
#  else
#    define CURL_EXTERN  __declspec(dllimport)
#  endif
#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS)
#  define CURL_EXTERN CURL_EXTERN_SYMBOL
#else
#  define CURL_EXTERN
#endif

这里被定义,如果没有定义CURL_STATICLIB,将会导致CURL_EXTERN被替换成__declspec(dllexport)或者__declspec(dllimport),这两个声明只应用于动态链接,不能应用于静态链接

2)error LNK2019: 无法解析的外部符号 __imp__ldap_init,该符号在函数 __ldap_free_urldesc 中被引用
在引用项目的属性中添加额外的静态库Crypt32.lib,Wldap32.lib,否则出现如下的错误,因为用到https

3)C2371 “curl_share_init”: 重定义;不同的基类型 libcurl

查看源码,如果没有定义BUILDING_LIBCURL,将导致curl_share_init在声明和定义中出现返回类型不一致的问题

#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER)
typedef struct Curl_easy CURL;
typedef struct Curl_share CURLSH;
#else
typedef void CURL;
typedef void CURLSH;
#endif

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:libcurl第二课编译静态库-创新互联
标题路径:http://scyanting.com/article/ggsoh.html