私のubuntuマシンで作成しているソフトウェアでlibcurlを使用する必要があります。私はEclipseを使用して、すべてのソフトウェアを作成およびコンパイルしています。 libcurlファイルを.cppファイルと同じフォルダーに入れ、curl.hファイルをヘッダーに含めると、プログラムをコンパイルしようとすると、次のエラーが発生します。
Building target: sms
Invoking: GCC C++ Linker
g++ -o"sms" ./src/sms.o
./src/sms.o: In function `main':
/home/geekman/workspace/sms/Debug/../src/sms.cpp:38: undefined reference to `curl_easy_init'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:42: undefined reference to `curl_easy_setopt'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:44: undefined reference to `curl_easy_setopt'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:46: undefined reference to `curl_easy_perform'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:47: undefined reference to `curl_easy_cleanup'
collect2: ld returned 1 exit status
make: *** [sms] Error 1
Libcurlからインクルードフォルダーのコンテンツを取得し、.cppファイルと同じフォルダーに配置しました。次に、.cppファイルのヘッダーに次のように入力しました。
#include <curl/curl.h>
私も試しました:
#include "curl/curl.h"
問題に関するアイデアはありますか?ありがとう。
ヘッダーファイルのインクルードは問題ありません。リンクのステップで問題が発生しています。 libcurlにリンクするには、標準ディレクトリにインストールされていると仮定して、-lcurl
コマンドラインオプションを追加する必要があります。
g++ -o sms ./src/sms.o -lcurl
標準のディレクトリにインストールされていない場合は、-L/path/to/libcurl
も追加する必要があります。何かのようなもの:
# Assuming that /home/geekman/workspace/libcurl is where libcurl.a is located
g++ -o sms ./src/sms.o -L/home/geekman/workspace/libcurl -lcurl
また、-lcurl
オプションは、リンクしているオブジェクトファイルのリストafterを表示する必要があります。そうしないと、正しくリンクされません。
curl-config --libs
。
代替回答(最初の回答は優れています)。 「pkg-config --libs libcurl」によって返された出力をコンパイラの引数として使用することを検討してください。
例えば、
CPPFLAGS = `pkg-config --libs libcurl`
g ++ $ CPPFLAGS myfile.o
Pkg-configは、オープンソースライブラリがそれらをリンクする方法/#ファイルを含める方法を通信するための標準的な方法です。
Ecplise CDTを使用している人なら、次のことを行う必要があります。最初に端末に入る
curl-config --libs
私のマシンでは、結果は
-L/usr/lib/i386-linux-gnu -lcurl
次に、このスクリーンショットに従って行うと、コンパイルできます。ところで、コードにヘッダーファイルを追加することを忘れないでください
そのため、-Lなしのライブラリフォルダーパスと-lなしのライブラリ名を入力すると、リンカーによって自動的に追加されます。
ライブラリをプログラムにリンクする必要があります。 gcc(および他のほとんどのコンパイラ)では、-lname_wo_lib
とリンクするライブラリを指定できます。 -lcurl
Adam Rosenfieldが言ったオプションの詳細な説明については GNU GCCマニュアル-リンクのオプション も参照してください。標準の検索ディレクトリについては、 GCCの概要-GNUコンパイラgccおよびg ++-検索パスの設定 について)を参照してください。