web-dev-qa-db-ja.com

Linuxでlibcurlをc ++プログラムにリンクするにはどうすればよいですか?

私の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"

問題に関するアイデアはありますか?ありがとう。

29

ヘッダーファイルのインクルードは問題ありません。リンクのステップで問題が発生しています。 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を表示する必要があります。そうしないと、正しくリンクされません。

51
Adam Rosenfield

curl-config --libs

9
Alex Pantalones

代替回答(最初の回答は優れています)。 「pkg-config --libs libcurl」によって返された出力をコンパイラの引数として使用することを検討してください。

例えば、

CPPFLAGS = `pkg-config --libs libcurl`

g ++ $ CPPFLAGS myfile.o

Pkg-configは、オープンソースライブラリがそれらをリンクする方法/#ファイルを含める方法を通信するための標準的な方法です。

4
Sam

Ecplise CDTを使用している人なら、次のことを行う必要があります。最初に端末に入る

curl-config --libs

私のマシンでは、結果は

-L/usr/lib/i386-linux-gnu -lcurl

次に、このスクリーンショットに従って行うと、コンパイルできます。ところで、コードにヘッダーファイルを追加することを忘れないでください

enter image description here

そのため、-Lなしのライブラリフォルダーパスと-lなしのライブラリ名を入力すると、リンカーによって自動的に追加されます。

2
adeel41

ライブラリをプログラムにリンクする必要があります。 gcc(および他のほとんどのコンパイラ)では、-lname_wo_libとリンクするライブラリを指定できます。 -lcurl

1
ckruse

Adam Rosenfieldが言ったオプションの詳細な説明については GNU GCCマニュアル-リンクのオプション も参照してください。標準の検索ディレクトリについては、 GCCの概要-GNUコンパイラgccおよびg ++-検索パスの設定 について)を参照してください。

0