1

我的代码:

#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.liblibcurl_imp通过Project->Add...添加到项目中

如何修复此错误?

编辑:
当我只用 编译时libcurl_imp.lib,一切都很好,但程序需要libcurl.dll.

4

1 回答 1

0

即使您已将库复制到构建环境中,您也需要明确告诉它将库链接到您的应用程序。

embarcadero网站上有一个很好的页面,介绍了如何配置项目设置以链接其他图书馆。




对于使用上述解决方案后出现的新错误,您需要进行一些额外的更改。首先,您需要链接调用的 Winsock 库Ws2_32.lib才能使用WSAIoctl. 它是一个 Windows 库,因此它应该已经安装在您的开发环境中。

添加该库后,您需要仔细检查 libcurl 配置以确保将正确的调用编译到库中。您需要重建库(或下载预编译版本)才能获得这些缺失的函数调用。当您构建至少USE_ARESCURLRES_ASYNCH已添加到预处理器的预定义符号设置的库时。您还需要确保定义了以下附加符号。

于 2013-05-25T18:22:08.277 回答