2011-10-24 55 views
0

我發現這個線程,同時尋找一種方式來一個網址下載到我的電腦: Download file using libcurl in C/C++捲曲錯誤:未定義的引用

我下載了捲曲的窗戶和合並所有3個文件夾在MinGW的現有同行目錄:include,lib和bin。

現在,每當我編寫的代碼,我得到了下面的錯誤,我知道他們是由於沒有連接正確的庫,但在我所提供的鏈接他們的是什麼鏈接都沒有足夠的信息:

obj\Debug\main.o 
In function main': 
D:\CPP Scrap\curl1\main.cpp:11: undefined reference to __imp__curl_easy_init' 
D:\CPP Scrap\curl1\main.cpp:13: undefined reference to __imp__curl_easy_setopt' 
D:\CPP Scrap\curl1\main.cpp:14: undefined reference to __imp__curl_easy_perform' 
D:\CPP Scrap\curl1\main.cpp:17: undefined reference to __imp__curl_easy_cleanup' 
=== Build finished: 4 errors, 0 warnings === 

它顯示標題curl/types.h正在包含,但我無法在我下載的curl的[latest]版本中找到它,所以我猜我必須鏈接一些東西,問題是,它是什麼?

代碼:

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

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; 
    char *url = "http://localhost/aaa.txt"; 
    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; 
} 
+0

您是否想告訴我們錯誤信息?看起來你忘了添加它們。 –

+0

我想你會得到未定義的符號錯誤,因爲你缺少'curllib.lib'。你的下載是否有這些文件?你有沒有設置你的編譯/ IDE與該文件鏈接? – birryree

+0

@birryree 我從他們的官方網站下載了一個zip文件。我沒有** curllib.lib **,但是我有** libcurl.a **,並且鏈接它並不能消除錯誤。 注意,捲曲文件也缺少**捲曲/ types.h中** – ToniAz

回答

0

我不知道Windows中的細節(我從來沒有使用過該系統,但自1993年以來的幸福我使用GNU/Linux的),但你可能需要將libcurl鏈接庫(可能使用像libcurl.lib和/或libcurl.dll或類似的文件)。

但是您是否考慮過使用GNU/Linux作爲您的開發平臺?如果你想使用C++ & Curl,它會有很大的意義(因爲Linux有一個很好的免費C++編譯器,GCC,並且因爲libcurl可能主要針對和在Linux上開發)。並且能夠瀏覽系統的所有源代碼使您能夠學習很多東西。

+0

非常感謝您的支持。我實際上使用Windows操作系統的GNU minimcal編譯器(MinGW ofcourse)。所以我認爲不會有太大的區別。我鏈接到** libcurl.a **,但不是任何DLL。它仍然不起作用,給** curl_easy **函數一個未定義的錯誤 – ToniAz