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

时间:2011-06-10 05:19:21

标签: 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/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>

我也尝试过:

#include "curl/curl.h"

关于这个问题的任何想法?感谢。

7 个答案:

答案 0 :(得分:51)

你的头文件包含就好了;你的问题发生在链接步骤。为了链接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选项必须在链接的目标文件列表后出现,否则将无法正确链接。

答案 1 :(得分:9)

您可以尝试使用curl-config --libs

答案 2 :(得分:4)

另一个答案(第一个很好)。考虑使用“pkg-config --libs libcurl”返回的输出作为编译器的参数。

例如,

  

CPPFLAGS =`pkg-config --libs libcurl`

     

g ++ $ CPPFLAGS myfile.o

Pkg-config是开源库与您通信的标准方式,如何链接它们/ #include他们的文件。

答案 3 :(得分:2)

任何使用ecplise CDT的人都需要做以下事情。首先在终端输入

curl-config --libs

在我的机器上,结果是

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

然后按照此截图进行操作,您就可以编译了。顺便说一句,不要忘记在代码中添加头文件

enter image description here

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

答案 4 :(得分:1)

您必须将库链接到您的程序。使用gcc(和大多数其他编译器),您可以指定要与-lname_wo_lib链接的库,例如-lcurl

答案 5 :(得分:0)

另见GNU GCC Manual - Options for Linking有关Adam Rosenfield所说选项的详细说明。对于标准搜索目录,请参阅An Introduction to GCC - for the GNU Compilers gcc and g++ - Setting Search Paths

答案 6 :(得分:0)

除了第一个答案之外,我还必须链接 curlpp 库。所以要编译包含 curlpp 的 main.cpp 文件,我必须这样做:

g++ main.cpp -lcurl -lcurlpp

仅使用两个链接之一会返回关于不同链接的不同错误。重要的是要提醒,这只是因为我已经在标准包含文件夹中安装了所有必要的库