C++ 如何将libcurl链接到我的c++;linux中的程序?

C++ 如何将libcurl链接到我的c++;linux中的程序?,c++,linux,eclipse,libcurl,C++,Linux,Eclipse,Libcurl,我需要在我在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/workspac

我需要在我在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获取include文件夹的内容,并将它们放在与.cpp文件相同的文件夹中。然后在.cpp文件的标题中,我键入:

#include <curl/curl.h>

对这个问题有什么想法吗?谢谢。

您必须将库链接到您的程序。使用gcc(以及大多数其他编译器),您可以指定要链接到
-lname\u wo\u lib
的库,例如
-lcurl
您的头文件包含得很好;您的问题发生在链接步骤。为了链接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
选项必须出现在您链接的对象文件列表之后,否则它将无法正确链接。

另一个答案(第一个答案非常好)。考虑使用“PKG CONFIG-LIBS LIBCURL”返回的输出作为编译器的参数。 比如说,

CPPFLAGS=`pkg config--libs libcurl`

g++$CPPFLAGS myfile.o


Pkg config是开源库与您交流如何链接它们/包含它们的文件的标准方式

亚当·罗森菲尔德(Adam Rosenfield)说,有关选项的详细解释,请参见。有关标准搜索目录,请参阅。

您可以尝试使用
curl-config--libs
任何使用ecplise CDT的人,然后您需要执行以下操作。第一个在终端进入

curl-config --libs
在我的机器上,结果是

-L/usr/lib/i386-linux-gnu -lcurl
然后根据这个屏幕截图进行操作,您将能够编译。顺便说一句,不要忘记在代码中添加头文件


因此,您输入的库文件夹路径不带-L,库名称不带-L,因为它们将由链接器自动添加。

除了第一个答案之外,我还必须链接curlpp库。因此,要编译包含curlpp的main.cpp文件,我必须执行以下操作:

g++ main.cpp -lcurl -lcurlpp

仅使用两个链接中的一个将返回关于不同链接的不同错误。必须提醒的是,这只起作用,因为我已在标准include folders中安装了所有必要的库

某些libcurl函数具有附加依赖项,例如zlib,这可能会导致一些编译器警告,例如,在感谢中列出的可能依赖项-lcurl必须位于对象文件之后。。。您为我节省了很多时间:)为了安装
curl-config
,您可能需要安装
curl
开发包(
curl-dev
curl-devel
或诸如此类)。问题中缺少的引用仅与libcurl-easy相关。
g++ main.cpp -lcurl -lcurlpp