如何将libcurl构建为静态库并在项目中使用?

问题描述 投票:3回答:1

我无法将libcurl编译为在c ++项目中工作的静态库。构建包含curl的项目会导致链接器错误。

我从https://curl.haxx.se/download.html下载了curl的源代码。我尝试按照curl-7.65.1 \ winbuild \ BUILD.WINDOWS.txt]中的说明将其构建为静态库。

  1. 运行C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ VC \ Auxiliary \ Build \ vcvars32.bat(* vcvars32.bat)
  2. VS17 CD的开发人员命令提示符内cd .. \ curl-7.65.1 \ winbuild
  3. 运行nmake / f Makefile.vc模式=静态VC = 12 MACHINE = x86 DEBUG = no(* MACHINE = x64)
  4. 将curl-7.65.1 \ builds文件夹复制到vs17项目的项目文件夹中
  5. 添加$(projectdir)builds \ libcurl-vc12-x86-release-static-ipv6-sspi-winssl \ include到Project / Properties / C ++ / General / Additional Include Directories(* x64)] >>
  6. 将$(projectdir)builds \ libcurl-vc12-x86-release-static-ipv6-sspi-winssl / lib添加到Project / Properties / Linker / General / Additional Library Directories(* x64)
  7. 将libcurl_a.lib添加到Project / Properties / Linker / Input / Additional Dependencies
  8. 将$(projectdir)内的所有文件都包含在Project中
  9. 我的Visual Studio编译设置为Release和x86

    ((在上述工作流程中,我还尝试了使用x64进行修改[标记为*]的整个过程。结果是同一种链接器错误)

使用以下示例代码测试卷曲:

    #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 ==========

我无法将libcurl编译为在c ++项目中工作的静态库。构建包含curl的项目会导致链接器错误。我从https://curl.haxx.se / ...]下载了curl的源代码。

我使用以下命令构建
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

c++ curl static-libraries libcurl
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.