【问题标题】:How do I link libcurl to my c++ program in linux?如何在 linux 中将 libcurl 链接到我的 c++ 程序?
【发布时间】:2011-09-12 05:40:46
【问题描述】:

我需要在我的 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"

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

【问题讨论】:

    标签: c++ linux eclipse libcurl


    【解决方案1】:

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

    g++ main.cpp -lcurl -lcurlpp
    

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

    【讨论】:

    • 问题中缺少的引用仅与 libcurl-easy 有关。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      任何使用 ecplise CDT 的人都需要进行以下操作。首先在终端输入

      curl-config --libs
      

      在我的机器上,结果是

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 对于要安装的curl-config,您可能需要安装curl 开发包(curl-devcurl-devel 或类似的东西)。
        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          例如,

          CPPFLAGS=`pkg-config --libs libcurl`

          g++ $CPPFLAGS myfile.o

          Pkg-config 是开源库与您交流如何链接它们/#include 其文件的标准方式。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-09-08
            • 2013-05-25
            • 2023-01-26
            • 1970-01-01
            • 1970-01-01
            • 2013-08-26
            • 2022-06-12
            相关资源
            最近更新 更多