我如何链接libcurl到我的C ++程序在Linux中?

我需要在我正在写的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文件的头文件中input:

 #include <curl/curl.h> 

我也试过:

 #include "curl/curl.h" 

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

Solutions Collecting From Web of "我如何链接libcurl到我的C ++程序在Linux中?"

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

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

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

例如,

CPPFLAGS =`pkg-config –libs libcurl`

g ++ $ CPPFLAGS myfile.o

Pkg-config是开放源代码库的标准方式,可以向您传达如何链接它们/ #include它们的文件。

任何使用ecplise CDT的人都需要遵循以下步骤。 首先在终端输入

 curl-config --libs 

在我的机器上,结果是

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

然后按照这个截图做,你就可以编译。 顺便说一句,不要忘记在你的代码中添加头文件

在这里输入图像说明

所以你输入库文件夹路径没有-L和库名称不带-l,因为它们将被链接器自动添加。

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

另请参阅GNU GCC手册 – 链接选项,了解Adam Rosenfield所说的选项的详细解释。 对于标准搜索目录,请参阅GCC简介 – 用于GNU编译器gcc和g ++ – 设置搜索路径 。