[英]How to build libcurl as static library and use in project?
我无法将 libcurl 编译为 c++ 项目中的 static 库。 构建包含 curl 的项目会导致 linker 错误。
我从https://curl.haxx.se/download.html下载了 curl 的源代码。 我尝试按照 curl-7.65.1\winbuild\BUILD.WINDOWS.txt 中的说明将其构建为 static 库
我的 Visual Studio 编译设置是 Release 和 x86
(我还尝试了 x64 的整个过程,并在上述工作流程中修改 [标有 *]。结果是相同类型的 Linker 错误)
使用以下示例代码测试 curl:
#include <stdio.h>
#include <iostream>
#define CURL_STATICLIB
#include "curl/curl.h"
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://google.com");
/* example.com is redirected, so we tell libcurl to follow redirection */
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if (res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* always cleanup */
curl_easy_cleanup(curl);
}
std::cin.get();
}
1 > ------Build started : Project: demoCurl, Configuration : Release Win32------
1 > Application.cpp
1 > nonblock.obj : error LNK2001 : unresolved external symbol __imp__ioctlsocket@12
1 > nonblock.obj : error LNK2001 : unresolved external symbol __imp__ioctlsocket@12
1 > sendf.obj : error LNK2001 : unresolved external symbol __imp__WSAGetLastError@0
1 > telnet.obj : error LNK2001 : unresolved external symbol __imp__WSAGetLastError@0
1 > tftp.obj : error LNK2001 : unresolved external symbol __imp__WSAGetLastError@0
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__WSAGetLastError@0
1 > asyn - thread.obj : error LNK2001 : unresolved external symbol __imp__WSAGetLastError@0
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__WSAGetLastError@0
1 > ftp.obj : error LNK2001 : unresolved external symbol __imp__WSAGetLastError@0
1 > select.obj : error LNK2001 : unresolved external symbol __imp__WSAGetLastError@0
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__bind@12
1 > ftp.obj : error LNK2001 : unresolved external symbol __imp__bind@12
1 > tftp.obj : error LNK2001 : unresolved external symbol __imp__bind@12
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__closesocket@4
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__connect@12
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__getpeername@12
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__getsockname@12
1 > ftp.obj : error LNK2001 : unresolved external symbol __imp__getsockname@12
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__getsockopt@20
1 > smb.obj : error LNK2001 : unresolved external symbol __imp__htons@4
1 > socks_sspi.obj : error LNK2001 : unresolved external symbol __imp__htons@4
1 > telnet.obj : error LNK2001 : unresolved external symbol __imp__htons@4
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__htons@4
1 > curl_addrinfo.obj : error LNK2001 : unresolved external symbol __imp__htons@4
1 > doh.obj : error LNK2001 : unresolved external symbol __imp__htons@4
1 > ftp.obj : error LNK2001 : unresolved external symbol __imp__htons@4
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__ntohs@4
1 > ftp.obj : error LNK2001 : unresolved external symbol __imp__ntohs@4
1 > socks_sspi.obj : error LNK2001 : unresolved external symbol __imp__ntohs@4
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__recv@16
1 > sendf.obj : error LNK2001 : unresolved external symbol __imp__recv@16
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__setsockopt@20
1 > transfer.obj : error LNK2001 : unresolved external symbol __imp__setsockopt@20
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__socket@12
1 > hostip6.obj : error LNK2001 : unresolved external symbol __imp__socket@12
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__WSASetLastError@4
1 > curl_addrinfo.obj : error LNK2001 : unresolved external symbol __imp__WSASetLastError@4
1 > select.obj : error LNK2001 : unresolved external symbol __imp__WSASetLastError@4
1 > connect.obj : error LNK2001 : unresolved external symbol __imp__WSAIoctl@36
1 > transfer.obj : error LNK2001 : unresolved external symbol __imp__WSAIoctl@36
1 > curl_addrinfo.obj : error LNK2001 : unresolved external symbol __imp__getaddrinfo@16
1 > curl_addrinfo.obj : error LNK2001 : unresolved external symbol __imp__freeaddrinfo@4
1 > curl_gethostname.obj : error LNK2001 : unresolved external symbol __imp__gethostname@8
1 > curl_ntlm_core.obj : error LNK2001 : unresolved external symbol __imp__CryptAcquireContextA@20
1 > md5.obj : error LNK2001 : unresolved external symbol __imp__CryptAcquireContextA@20
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__CryptAcquireContextA@20
1 > curl_ntlm_core.obj : error LNK2001 : unresolved external symbol __imp__CryptReleaseContext@8
1 > md5.obj : error LNK2001 : unresolved external symbol __imp__CryptReleaseContext@8
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__CryptReleaseContext@8
1 > curl_ntlm_core.obj : error LNK2001 : unresolved external symbol __imp__CryptDestroyKey@4
1 > curl_ntlm_core.obj : error LNK2001 : unresolved external symbol __imp__CryptGetHashParam@20
1 > md5.obj : error LNK2001 : unresolved external symbol __imp__CryptGetHashParam@20
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__CryptGetHashParam@20
1 > curl_ntlm_core.obj : error LNK2001 : unresolved external symbol __imp__CryptImportKey@24
1 > curl_ntlm_core.obj : error LNK2001 : unresolved external symbol __imp__CryptEncrypt@28
1 > curl_ntlm_core.obj : error LNK2001 : unresolved external symbol __imp__CryptCreateHash@20
1 > md5.obj : error LNK2001 : unresolved external symbol __imp__CryptCreateHash@20
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__CryptCreateHash@20
1 > curl_ntlm_core.obj : error LNK2001 : unresolved external symbol __imp__CryptHashData@16
1 > md5.obj : error LNK2001 : unresolved external symbol __imp__CryptHashData@16
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__CryptHashData@16
1 > curl_ntlm_core.obj : error LNK2001 : unresolved external symbol __imp__CryptDestroyHash@4
1 > md5.obj : error LNK2001 : unresolved external symbol __imp__CryptDestroyHash@4
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__CryptDestroyHash@4
1 > ftp.obj : error LNK2001 : unresolved external symbol __imp__accept@12
1 > ftp.obj : error LNK2001 : unresolved external symbol __imp__listen@8
1 > idn_win32.obj : error LNK2001 : unresolved external symbol __imp__IdnToAscii@20
1 > idn_win32.obj : error LNK2001 : unresolved external symbol __imp__IdnToUnicode@20
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_init
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_sslinit
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_unbind_s
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_set_option
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_simple_bind_s
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_bind_s
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_search_s
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_msgfree
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_err2string
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_first_entry
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_next_entry
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_first_attribute
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_next_attribute
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_get_values_len
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_value_free_len
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_get_dn
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ldap_memfree
1 > ldap.obj : error LNK2001 : unresolved external symbol __imp__ber_free
1 > select.obj : error LNK2001 : unresolved external symbol ___WSAFDIsSet@8
1 > select.obj : error LNK2001 : unresolved external symbol __imp__select@20
1 > sendf.obj : error LNK2001 : unresolved external symbol __imp__send@16
1 > telnet.obj : error LNK2001 : unresolved external symbol __imp__send@16
1 > system_win32.obj : error LNK2001 : unresolved external symbol __imp__WSAStartup@8
1 > telnet.obj : error LNK2001 : unresolved external symbol __imp__WSAStartup@8
1 > system_win32.obj : error LNK2001 : unresolved external symbol __imp__WSACleanup@0
1 > telnet.obj : error LNK2001 : unresolved external symbol __imp__WSACleanup@0
1 > tftp.obj : error LNK2001 : unresolved external symbol __imp__recvfrom@24
1 > tftp.obj : error LNK2001 : unresolved external symbol __imp__sendto@24
1 > krb5_sspi.obj : error LNK2001 : unresolved external symbol __imp__htonl@4
1 > krb5_sspi.obj : error LNK2001 : unresolved external symbol __imp__ntohl@4
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__CryptGenRandom@12
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__CertOpenStore@20
1 > schannel_verify.obj : error LNK2001 : unresolved external symbol __imp__CertOpenStore@20
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__CertCloseStore@8
1 > schannel_verify.obj : error LNK2001 : unresolved external symbol __imp__CertCloseStore@8
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__CertEnumCertificatesInStore@8
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__CertFindCertificateInStore@24
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__CertFreeCertificateContext@4
1 > schannel_verify.obj : error LNK2001 : unresolved external symbol __imp__CertFreeCertificateContext@4
1 > schannel.obj : error LNK2001 : unresolved external symbol __imp__CryptStringToBinaryA@28
1 > schannel_verify.obj : error LNK2001 : unresolved external symbol __imp__CertAddCertificateContextToStore@16
1 > schannel_verify.obj : error LNK2001 : unresolved external symbol __imp__CertGetNameStringA@24
1 > schannel_verify.obj : error LNK2001 : unresolved external symbol __imp__CryptQueryObject@44
1 > schannel_verify.obj : error LNK2001 : unresolved external symbol __imp__CertCreateCertificateChainEngine@8
1 > schannel_verify.obj : error LNK2001 : unresolved external symbol __imp__CertFreeCertificateChainEngine@4
1 > schannel_verify.obj : error LNK2001 : unresolved external symbol __imp__CertGetCertificateChain@32
1 > schannel_verify.obj : error LNK2001 : unresolved external symbol __imp__CertFreeCertificateChain@4
1 > C:\...\demoCurl\Release\demoCurl.exe : fatal error LNK1120 : 72 unresolved externals
1 > Done building project "demoCurl.vcxproj" --FAILED.
========== Build: 0 succeeded, 1 failed, 0 up - to - date, 0 skipped ==========
我使用以下命令构建
nmake /f Makefile.vc mode=static RTLIBCFG=static DEBUG=yes ENABLE_IDN=no ENABLE_SSPI=no
并链接到
libcurl_a_debug.lib ws2_32.lib wldap32.lib
下面的答案对我有用。 但是如果你不知道nmake和Makefile.vc ,你需要关注这个,请看这个线程。 https://stackoverflow.com/a/54680718/19178910
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.