2013-05-10 37 views
25

私はC.未定義の参照(C)

にカールを使用しようとしています私は、公式ページカール訪問し、サンプルソースコードをコピーしました。以下

リンクです:私はコマンド "gccのtest.cの" と、このコードを実行すると、コンソールには以下のようなメッセージが表示さ

http://curl.haxx.se/libcurl/c/sepheaders.html

/tmp/cc1vsivQ.o: In function `main': 
test.c:(.text+0xe1): undefined reference to `curl_global_init' 
test.c:(.text+0xe6): undefined reference to `curl_easy_init' 
test.c:(.text+0x10c): undefined reference to `curl_easy_setopt' 
test.c:(.text+0x12e): undefined reference to `curl_easy_setopt' 
test.c:(.text+0x150): undefined reference to `curl_easy_setopt' 
test.c:(.text+0x17e): undefined reference to `curl_easy_cleanup' 
test.c:(.text+0x1b3): undefined reference to `curl_easy_cleanup' 
test.c:(.text+0x1db): undefined reference to `curl_easy_setopt' 
test.c:(.text+0x1e7): undefined reference to `curl_easy_perform' 
test.c:(.text+0x1ff): undefined reference to `curl_easy_cleanup' 

私はこれを解決する方法がわかりません。

答えて

62

あなたはライブラリにリンクしていません。

それに外部ライブラリの作業を行う必要がありリンク使用時:

$ gcc test.c -lcurl 

を最後のオプションは、ライブラリcurlで(-l)をリンクするGCCに指示します。

12

Joachim Pileborgの答えに加えて、gcc/g ++のリンクは秩序に敏感であり、リンクされたライブラリはそれらに依存するものに従わなければならないことを覚えておくと便利です。

$ gcc -lcurl test.c

は前と同じ記号を行方不明、を失敗します。私はこの事実を忘れてこのページに来たので、これを言います。

0

私は同じ問題を抱えていますが、私はg ++をmakeファイルとともに使用しています。 これはリンカーの問題です。 オプション-lcurlをコンパイラおよびリンカに追加する必要があります。

CC ?= gcc 
CXX ?= g++ 
CXXFLAGS += -I ../src/ -I ./ -DLINUX -lcurl <- compile option 
LDFLAGS += -lrt -lpthread -lcurl  <- linker option 

ジェラルド

1

以前の答えが正しい、しかし、そうでないあなただけのオブジェクト・ファイルを生成します、バイナリを生成するために-oテストを追加することを忘れないでください:メイクファイルの私の場合は 。

gcc test.c -lcurl -o test