2011-10-18 6 views
3

私はこのコードをMacで実行しようとしています。私はカールをインストールしました。私がカールを検索すると、私は/usr/include/curl/curl.hの下にそれを見つけることができます。以下は私が走りたいプログラムです。 hereから撮影。C++のライブラリパス。失敗します?

#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


ライブラリファイルはlibcurl.dylib同様またはそれとリンクする、これを使用し
libcurl.a何かする必要がありますそれ。コンパイルしたいだけの場合は、g ++に '-c'を渡します。プログラムをコンパイルすると、エラーは発生しません。 –

答えて

6

あなたはlibcurlのライブラリをリンクするために忘れてしまった:

g++ simple.cpp -lcurl 

など<curl/curl.h>などのヘッダファイル(通常は)のみの関数のグループが存在することを宣言しますが、実際の機能が含まれていません。 OS X Lionのカールの場合、それらの関数はlibcurl(/usr/lib/libcurl.4.dylibを指す/usr/lib/libcurl.dylib)にあります。 -lcurlで行うことができるライブラリについて、(コンパイラのフロントエンドを介して)リンカに伝える必要があります。

+0

ええ、あなたは正しいです。私はあなたにもう1つ質問したいです。複数のライブラリを使用したいのですが?私はいつもこのparamsを使わなければならないのですか?どのように私はparamsが何であるか知っています。あなたはもっと説明できますか?ありがとう。 – DarthVader

+1

使用する各ライブラリのドキュメントでは、その使用方法について説明します。ライブラリを使用するために必要なコンパイラまたはリンカオプションが含まれている必要があります。 –

+1

@Darth複数のライブラリをリンクする必要がある場合は、リンカ/コンパイラのフロントエンドに '-l <ライブラリ名> 'を指定する必要があります。たとえば、ncursesをリンクする必要がある場合は、 'g ++ simple.cpp -lcurl -lncurses'を使用します。 –

5

プログラムはインクルードファイルを検索しますが、ライブラリファイルは検索しません。あなたはちょうどあなたがコンパイルしようとしている、プログラムをコンパイルするために抱き合わせと*リンク*されていません

g++ simple.cpp -lcurl 
関連する問題