我的代码:
#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
通过项目 - &gt;添加...
如何解决此错误?
修改
当我使用libcurl_imp.lib
进行编译时,一切正常,但程序需要libcurl.dll
。
答案 0 :(得分:0)
即使您已将库复制到构建环境中,您也需要明确告诉它将库链接到您的应用程序。
embarcadero网站在how to configure your project设置上有一个很好的页面,用于链接其他图片。
对于使用上述解决方案后出现的新错误,您需要进行一些其他更改。首先,您需要链接名为Ws2_32.lib
的Winsock库才能使用WSAIoctl
。它是一个Windows库,因此 已经安装在您的开发环境中。
添加该库后,您需要仔细检查libcurl配置,以确保将正确的调用编译到库中。您需要重建库(或下载预编译版本)才能获得这些缺少的函数调用。构建库时,至少USE_ARES
和CURLRES_ASYNCH
已添加到预处理器的预定义符号设置中。您还需要确保定义了以下附加符号。