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

posted @ 2022-02-21 15:22  soso101  阅读(727)  评论(0编辑  收藏  举报