libcurl在Windows环境静态编译后的问题总结
使用静态库时发现报错
1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_cleanup referenced in function _main 1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_perform referenced in function _main 1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_setopt referenced in function _main 1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_init referenced in function _main
查找curl源码,在easy.h中找到curl_easy_init等函数的声明:
CURL_EXTERN CURL* curl_easy_init(void);
接着查看CURL_EXTERN的定义,在curl.h文件中看到它在不同情况中的定义不同,在静态库使用时定义为空,在动态库使用时会展开为导入导出符号。了解这个情况之后,由于我们当前要使用的是它的静态库,因此在使用的项目中增加预处理项CURL_STATICLIB,使用静态库形式。
增加预处理项后编译,发现又有新的错误信息:
LNK2019 无法解析的外部符号 __imp_CertOpenStore
还需要增加链接库Crypt32.lib、Wldap32.lib和Normaliz.lib。
参考:
c - Unresolved symbols when linking a program using libcurl - Stack Overflow