我的代码:
#include <curl/curl.h>
...
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_URL, "https://www.google.com/");
res = curl_easy_perform(curl);
if(res != CURLE_OK)
{
const char *error = curl_easy_strerror(res);
wchar_t *errorw;
mbtowc(errorw, error, sizeof(error));
MessageBox(Application->Handle, L"Test", errorw, 0);
}
curl_easy_cleanup(curl);
}
curl_global_cleanup();
...
当我尝试使用 libcurl 编译我的程序时,出现以下错误:
[ilink32 Error]
Error: Unresolved external 'WSAIoctl' referenced from ..\LIBCURL.LIB|easy
... '_Curl_resolver_init' referenced from ..\LIBCURL.LIB|url
... '_Curl_resolver_cleanup' referenced from ..\LIBCURL.LIB|url
... '_Curl_set_dns_servers' referenced from ..\LIBCURL.LIB|url
... '_Curl_resolver_wait_resolv' referenced from ..\LIBCURL.LIB|connect
... '_Curl_resolver_cancel' referenced from ..\LIBCURL.LIB|url
... '_Curl_resolver_getaddrinfo' referenced from ..\LIBCURL.LIB|hostasyn
... '_Curl_resolver_is_resolved' referenced from ..\LIBCURL.LIB|hostip
... '_Curl_resolver_getsock' referenced from ..\LIBCURL.LIB|multi
... '_Curl_resolver_global_init' referenced from ..\LIBCURL.LIB|easy
... '_Curl_resolver_global_cleanup' referenced from ..\LIBCURL.LIB|easy
... '_Curl_resolver_duphandle' referenced from ..\LIBCURL.LIB|easy
include/curl 复制到 C:\Program Files (x86)\Embarcadero\RAD Studio\11.0\include
lib/libcurl.lib 和 libcurl_imp 通过 Project->Add... 添加到项目
如何修复这个错误?
编辑:
当我仅使用 libcurl_imp.lib
进行编译时,一切正常,但程序需要 libcurl.dll
。
最佳答案
即使您已将库复制到您的构建环境中,您也需要明确告诉它将该库链接到您的应用程序。
embarcadero网站上有一个不错的页面 how to configure your project链接其他图书馆的设置。
对于使用上述解决方案后出现的新错误,您需要进行一些额外的更改。首先,您需要链接名为 Ws2_32.lib
的 Winsock 库,以便使用 WSAIoctl
。它是一个 Windows 库,因此应该已经安装在您的开发环境中。
添加该库后,您需要仔细检查 libcurl 配置以确保将正确的调用编译到库中。您将需要重建库(或下载预编译版本)以获得这些缺失的函数调用。当您构建库时,至少 USE_ARES
和 CURLRES_ASYNCH
已添加到预处理器的预定义符号设置中。您还需要确保定义了以下附加符号。
关于c++ - curl ilink32 错误 : Unresolved external,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16752573/