簡體   English   中英

cURL特定的未定義參考

[英]cURL specific undefined reference

我終於能夠正確地(我認為)將cURL鏈接到代碼塊(GNU編譯器),並解決了所有dll問題。 它能夠編譯並正確運行一次,然后停止處理與libcurl.a(url.o)相關的新錯誤。 這兩個錯誤是

undefined reference to 'idna_to_ascii_lz' 
undefined reference to 'string_prep_locale_charset'.  

由於我所做的修改很少,因此在先前成功的構建之后出現了錯誤,這對我來說是沒有意義的。 我的構建選項是-lcurl --lws2_32和-lwsock32(擺脫成功編譯后彈出的另一個錯誤)。

我認為由於以前的成功構建,我的鏈接是成功的,並且我添加了以前要求的所有dll。 我該如何修復它,為什么它以前沒有做得好? 我應該打開編譯器設置嗎? 唯一啟用的是-Wall和-fexceptions

下面是測試代碼,該代碼直接從另一個網站進行了修改。

#define CURL_STATICLIB
#include <stdio.h>
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>
#include <string>
#include <iostream>

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
    size_t written;
    written = fwrite(ptr, size, nmemb, stream);
    return written;
}

int main(void) {
    CURL *curl;
    FILE *fp;
    CURLcode res;
    std::cout << "Hello World";
    char *url = "http://cnn.com";
    char outfilename[FILENAME_MAX] = "C:\\bbb.txt";
    curl = curl_easy_init();
    if (curl) {
        fp = fopen(outfilename,"wb");
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
        fclose(fp);
    }
    return 0;
}

感謝你的幫助

更新:根據TimRau的建議,我在鏈接器選項中添加了-lidn。 我現在收到以下錯誤:

||=== Build: Debug in Curl2 (compiler: GNU GCC Compiler) ===|

C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ssluse.o)|| undefined reference to `ERR_remove_thread_state'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_err2stringA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_set_optionA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_simple_bind_sA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_search_sA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_err2stringA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_err2stringA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_set_optionA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_initA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_get_dnA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_first_attributeA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_get_values_lenA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_memfreeA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_next_attributeA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_memfreeA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_memfreeA'|
C:\libs\curl-7.34.0-devel-mingw32\lib\libcurl.a(ldap.o)|| undefined reference to `_imp__ldap_memfreeA'|
||=== Build failed: 17 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

對於鏈接庫,我具有以下鏈接:c:\\ libs \\ libcurl_imp.lib c:\\ libs \\ libeay32.lib c:\\ libs \\ openldap.lib c:\\ libs \\ ssleay32.lib

我的鏈接器搜索目錄中也包含curl lib,而curl包含編譯器搜索目錄。 我按照http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/上的在線說明進行了放置,因為它曾經構建並工作過一次,所以我認為這些設置是正確的,但是我在我對編程這部分的理解的極限范圍內。

更新2:通過添加消除了第一個錯誤

您需要在編譯命令的末尾添加-lidn -lwldap32

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM