CでCurlを使用しようとしています。
Curlの公式ページにアクセスし、サンプルソースコードをコピーしました。
以下はリンクです: http://curl.haxx.se/libcurl/c/sepheaders.html
コマンド「gcc test.c」でこのコードを実行すると、
コンソールには次のようなメッセージが表示されます。
/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'
これを解決する方法がわかりません。
ライブラリとリンクしていません。
外部ライブラリを使用する場合は、linkを使用する必要があります。
$ gcc test.c -lcurl
最後のオプションは、GCCにリンク(-l
)ライブラリcurl
を使用します。
Joachim Pileborgの答えに加えて、gcc/g ++リンクは順序に敏感であり、リンクされたライブラリはそれらに依存するものに従う必要があることを覚えておくと便利です。
$ gcc -lcurl test.c
失敗します、以前と同じシンボルが欠落しています。この事実を忘れてこのページに来たので、私はこれに言及します。
私は同じ問題を抱えていますが、メイクファイルでg ++を使用しています。これはリンカーの問題です。コンパイラーとリンカーにオプション-lcurlを追加する必要があります。私の場合、メイクファイルで:
CC ?= gcc
CXX ?= g++
CXXFLAGS += -I ../src/ -I ./ -DLINUX -lcurl <- compile option
LDFLAGS += -lrt -lpthread -lcurl <- linker option
ジェラルド
どれほど悪いことかによっては、ライブラリがどこにあるかをリンカに知らせるために、LDFLAGSの-L/somewhereが必要になる場合があります。 ldconfigは、すべてのブートでそれらをピックアップして検出することになっていますが、新しいマシンでは、/ etc/ld.so.confにディレクトリを追加するなど、少し時間がかかります。