2014-01-27 80 views
0

我是C++新手,有興趣編寫一個簡單的應用程序從互聯網下載HTTP文件並處理它的內容。無論如何,我在網上找到一個名爲libcurl的庫。我去以下網站:在C++應用程序中構建/編譯libcurl問題

http://curl.haxx.se/download.html

  1. 我應該下載源歸檔文件或二進制包(Win64的MinGW64)?使用源代碼檔案與二進制代碼檔案有什麼區別和優缺點?
  2. 因爲我正在編寫C++應用程序,我應該使用curlcpp綁定嗎?我怎樣才能將curlcpp綁定到這個?

無論如何,我下載了curl-7.34.0.zip(Source Archive)並在裏面,它包含了很多文件夾。我懷疑,我將需要包括文件夾爲:

  • 包括
  • LIB
  • SRC

我使用的代碼塊IDE。我「遞歸地添加」文件夾「include/curl」到我的項目中。它看起來像這樣:

enter image description here

我main.cpp中包含以下代碼(來自示例應用程序的網站上獲取):

#include <iostream> 
#include <stdio.h> 
#include "curl/curl.h" 
using namespace std; 

int main() 
{ 
    CURL *curl; 
    CURLcode res; 

    curl = curl_easy_init(); 
    if(curl) { 
     curl_easy_setopt(curl, CURLOPT_URL, "http://example.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); 

    } 
    return 0; 
} 

我收到試圖建立時,下面的錯誤信息/編譯。

undefined reference to '_imp__curl_easy_init' 
undefined reference to '_imp__curl_easy_setopt' 
undefined reference to '_imp__curl_easy_perform' 
undefined reference to '_imp__curl_easy_strerror' 
undefined reference to '_imp__curl_easy_cleanup' 

我不確定我缺少什麼或者我的文件夾目錄是否被錯誤地使用。你有什麼建議可以幫助我通過源碼歸檔或二進制包來構建嗎?謝謝。

回答

1

有幾個問題在這裏:

  1. 從不。絕對不要將庫頭直接添加到項目中。將它們複製到您的包含目錄中。
  2. #include <curl.h>:您使用<>這意味着 - 在包含目錄中搜索。嘗試將其替換爲:#include "curl.h" - 這意味着要搜索項目幷包含目錄。

但是你應該做nr。 1 - 因爲這段代碼不是你的項目的一部分。它是捲曲項目的一部分。

編輯 發表評論 - 它取決於你真正把標題放在哪裏。如果將它們放在include\curl目錄中,則使用#include "curl/curl.h"

編輯問題編輯 您需要指定.lib引用。 當你使用curl時,你不會編譯它。它已經由一些天才傢伙從捲曲編輯爲.dll s的形式。除非你告訴它如何去做,否則你的程序不知道如何使用它們。要做到這一點,你必須改變你的鏈接器選項 - 通過提供所謂的lib文件。 lib文件告訴鏈接器它應該使用哪個.dll

我假設你有你的捲曲目錄。除了include之外,還應該有lib。現在你需要做的是告訴鏈接器,你需要libcurl.alib目錄捲曲。繼續:項目構建選項|鏈接器設置。在Link libraries部分指定到libcurl.a的路徑。

+0

嗨米迦勒。在下載的Source Archive zip中,我似乎找不到任何庫(.a,.so,.lib或.dll)。順便說一下,這是Windows的。我只在「include」,「src」和「lib」文件夾中看到.h/.cpp文件。我是否需要下載Windows 64「Package」? – codeshark

+0

作爲嘗試使用「軟件包」而不是「源代碼歸檔」構建的實驗,我創建了一個新項目,然後繼續下載Win64 - MinGW64二進制包。這在壓縮文件中有「.dll」文件,但不包括源代碼。它有libcurl.dll,libeay32.dll,ssleay32.dll。我試圖在構建選項==>鏈接器設置中將它作爲鏈接庫添加,但是在文件瀏覽器中看不到任何內容,因爲在CodeBlocks中,似乎唯一可接受的庫文件是* .a,* .so ,* .lib和* .dyl – codeshark

+0

您是否能夠成功鏈接上面提到的.dll文件,並且能夠運行源代碼而不會出現編譯錯誤? – codeshark