在C ++应用程序中构建/编译libcurl时出现问题

时间:2014-01-27 22:23:57

标签: c++ build compilation compiler-errors libcurl

我是C ++的新手,我有兴趣编写一个简单的应用程序从互联网上下载HTTP文件并处理它的内容。无论如何,我找到了一个名为libcurl online的库。我去了以下网站:

http://curl.haxx.se/download.html

  1. 我应该下载源存档还是二进制包(Win64 MinGW64)?使用源存档与二进制pkg之间的区别和优缺点是什么?
  2. 我是否应该使用curlcpp绑定,因为我正在编写C ++应用程序?如何将curlcpp绑定与此结合?
  3. 无论如何,我下载了curl-7.34.0.zip(源档案),里面包含很多文件夹。我怀疑我需要包含的文件夹是:

    • 包括
    • LIB
    • SRC

    我使用CodeBlocks IDE。我“递归地”将文件夹“include / curl”添加到我的项目中。它看起来像这样:

    enter image description here

    我的main.cpp包含以下代码(取自网站上的示例应用程序):

    #include <iostream>
    #include <stdio.h>
    #include "curl/curl.h"
    using namespace std;
    
    int main()
    {
        CURL *curl;
        CURLcode res;
    
        curl = curl_easy_init();
        if(curl) {
            curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
            /* example.com is redirected, so we tell libcurl to follow redirection */
            curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
    
            /* Perform the request, res will get the return code */
            res = curl_easy_perform(curl);
    
            /* Check for errors */
            if(res != CURLE_OK)
                fprintf(stderr, "curl_easy_perform() failed: %s\n",
                  curl_easy_strerror(res));
    
            /* always cleanup */
            curl_easy_cleanup(curl);
    
        }
        return 0;
    }
    

    尝试构建/编译时收到以下错误消息。

    undefined reference to '_imp__curl_easy_init'
    undefined reference to '_imp__curl_easy_setopt'
    undefined reference to '_imp__curl_easy_perform'
    undefined reference to '_imp__curl_easy_strerror'
    undefined reference to '_imp__curl_easy_cleanup'
    

    我不确定我遗漏了什么,或者我的文件夹目录是否被错误地使用了。您是否有任何建议可以帮助我通过源档案或二进制包构建这个?感谢。

1 个答案:

答案 0 :(得分:1)

这里有几个问题:

  1. 从不。绝对永远不会将库中的标题直接添加到您的项目中。将它们复制到您的包含目录。
  2. #include <curl.h>:您使用<>表示 - 搜索包含目录。尝试将其替换为:#include "curl.h" - 这意味着搜索项目并包含目录。
  3. 但你应该做nr。 1 - 此代码不是您项目的一部分。这是卷曲项目的一部分。

    修改 在评论中发布 - 这取决于你实际放置标题的位置。如果您将它们放在include\curl目录中,请使用#include "curl/curl.h"

    编辑问题后编辑 您需要指定.lib引用。 当你使用curl时,你不编译它。它已经被一些天才人员从卷曲编译成.dll s的形式。您的程序不知道如何使用它们,除非您告诉它如何使用它们。为此,您必须通过提供所谓的lib文件来更改链接器选项。 lib文件可以告诉链接器它应该使用哪个.dll

    我假设你有卷曲目录。除了include之外,还应该有lib。现在您需要做的是告诉链接器您需要libcurl.a curl目录中的lib。来吧:项目构建选项|链接器设置。在Link libraries部分中,指定libcurl.a的路径。