2011-10-18 97 views
3

我試圖在Mac上執行此代碼。我已經安裝了捲曲。當我搜索捲曲時,我可以在/usr/include/curl/curl.h下找到它。以下是我想運行的程序。取自hereC++的庫路徑。失敗?

#include <iostream> 
#include <curl/curl.h> 

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

    curl = curl_easy_init(); 
    if(curl) { 
    curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); 
    res = curl_easy_perform(curl); 

    /* always cleanup */ 
    curl_easy_cleanup(curl); 
    } 
    return 0; 
} 

當我嘗試編譯該程序。見下文。

g++ simple.cpp 
Undefined symbols: 
    "_curl_easy_perform", referenced from: 
     _main in cciFNPkt.o 
    "_curl_easy_init", referenced from: 
     _main in cciFNPkt.o 
    "_curl_easy_setopt", referenced from: 
     _main in cciFNPkt.o 
    "_curl_easy_cleanup", referenced from: 
     _main in cciFNPkt.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

這是怎麼回事?爲什麼程序找不到這個文件的路徑?

我該如何解決?

+1

你是不是隻是綁編譯程序*它。如果你只是想編譯它,把'-c'傳給g ++。它會編譯程序,你不會得到一個錯誤。 –

回答

6

你忘記libcurl庫鏈接:

g++ simple.cpp -lcurl 

頭文件,如<curl/curl.h>(典型值)只聲明瞭一組函數存在,但並不包含實際的功能。在OS X Lion上捲曲的情況下,這些函數位於libcurl中(/usr/lib/libcurl.dylib,指向/usr/lib/libcurl.4.dylib)。您需要告訴鏈接器(通過編譯器前端)關於該庫的信息,可以通過-lcurl完成。

+0

是的,你是對的。好吧,我想再問你一次,如果我想使用多個庫,該怎麼辦?我必須一直使用這個參數嗎?我怎麼知道這些參數是什麼。你能解釋嗎?謝謝。 – DarthVader

+1

您使用的每個庫的文檔將解釋如何使用它。它應該包含使用該庫所需的任何編譯器或鏈接器選項。 –

+1

@Darth如果您需要鏈接多個庫,則需要通過'-l <庫名>'告訴鏈接器/編譯器前端。例如,如果你也需要鏈接ncurses,你可以使用'g ++ simple.cpp -lcurl -lncurses'。 – 2011-10-18 23:24:24

5

程序確實找到了包含文件,但沒有找到庫文件。
庫文件應該是這樣的libcurl.dylib或libcurl.a
使用此與它聯繫起來:你試圖編譯和鏈接*

g++ simple.cpp -lcurl 
相關問題