VC++项目添加libcurl到附加依赖项后报libcurl_a.lib未解析外部符号错误
问题现象
VC++项目已经在附加依赖项添加了libcurl对应的库文件,仍然出现150+未解析外部符号错误,绝大多数和libcurl_a.lib相关,报错如下:
Error - 1>OLDNAMES.lib(open.obi): warning LNK4049: locally defined symbol open imported 1>libcurl_a.lib(mime.obj): error LNK2019: unresolved external symbol imp__feof referenced 1>libcurl_a.lib(mime.obj): error LNK2019: unresolved external symbol imp_access referenced in function Curl_mime_duppart in function _read_part content 1>OLDNAMES.lib(access.obi): error LNK2001: unresolved external symbol imp access 1>libcurl_a.lib(mime.obj): error LNK2019: unresolved external symbolimp_ stat64 referenced in function Curl_nine duppart 1>libcurl_a.lib(strerror.obj): error LNK2019: unresolved external symbolimp_strerror referenced in function Curl strerror 1>libcurl_a.lib(url.obj): error LNK2001: unresolved external symbol imp_strerror 1>1ibcurl_a.lib(telnet.obj): error LNK2001: unresolved external symbol imp_strncpy 1>1ibcurl_a.lib(ftp.obj): error LNK2001: unresolved external symbolimp_strncpy 1>libcurl_alib(curl_sspi.obj): error LNK2001: unresolved external symbolimp_strncpy 1>1ibcurl_s.lib(strerror.obj): error LNK2001: unresolved external symbolimp_strncpy 1>1ibcurl_a.lib(vtis.obj): error LNK2001: unresolved external symbol imp_strncpy 1>1ibcurl_.1ib(url.obj): error LNK2001: unresolved external symbolimp_strncpy 1>libcurl_a.lib(schannel.obj) error LNK 2001: unresolved external symbol_imp_strncpy 1>libcuri_a.lip(strerror.obj) : error LNK2019: unresolved external symbol imp sys_nerr referenced in function Curi strerror 1>libcurl_a.lib(warnless.obj): error LNK2019: unresolved external symbol 1 OLDNAMES1ib(read.obi): error LNK2001: unresolved external symbolimp_read imp_read referenced in function curl_read 111bcurt a.lib/warmless.obj) error LNK2019: unresolved external symbol_imp_write referenced in function curl, weite 1 OLDNAMES-110(write.obi): error LNK2001: unresolved external symbolimp_write
错误根因
所有报错的未解析符号都带__imp_前缀,说明项目默认按照动态库的导入规则去查找libcurl的符号,但你引用的是静态版本的libcurllibcurl_a.lib,同时存在运行库设置不匹配、依赖库缺失的问题。
修复步骤
- 第一步:添加静态libcurl专属预编译宏
打开项目属性页,依次进入C/C++ -> 预处理器 -> 预处理器定义,新增CURL_STATICLIB`,确保全局生效。 - 第二步:对齐运行库编译选项
进入C/C++ -> 代码生成 -> 运行库,选择和libcurl_a.lib编译时完全一致的运行库选项:- 官方预编译的release版静态libcurl对应*多线程 DLL (/MD)
- 官方预编译的debug版静态libcurl对应*多线程调试 DLL (/MDd)
- 自行编译的libcurl如果用了静态运行库,对应选择多线程 (/MT)或多线程调试 (/MTd)
- 第三步:补全所有依赖库
进入链接器 -> 输入 -> 附加依赖项,添加libcurl静态版必须的系统依赖库:ws2_32.lib;wldap32.lib;winmm.lib;crypt32.lib;advapi32.lib;normaliz.lib
如果你的libcurl编译时开启了zlib、libssh2等额外功能,同步添加对应静态库到附加依赖项。 - 第四步:确认架构匹配
检查项目编译架构(x86/x64)和libcurl_a.lib的编译架构完全一致,不可跨架构链接。
内容的提问来源于stack exchange,提问作者Anjali Singh
相关产品推荐
相关产品推荐

