c ++下载多个文件

时间:2016-01-26 08:43:10

标签: c++ c libcurl

我对c ++很陌生我已经下载并编译了一些没有问题的例子。

现在我尝试从服务器下载10个文件,并将每个文件写入不同的位置/文件名。

查看this post我已尝试使用该代码:

jQuery('input.icheck').on('ifChanged', function (event) {
    if ($(this).prop('checked')) {
        alert('checked');
    } else {
        alert('unchecked');
    }
});

但是当我使用#include <iostream> #include <stdio.h> #include <curl/curl.h> #include <string.h> size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t written; written = fwrite(ptr, size, nmemb, stream); return written; } void downloadFile(const char* url, const char* fname) { CURL *curl; FILE *fp; CURLcode res; curl = curl_easy_init(); if (curl){ fp = fopen(fname, "wb"); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); res = curl_easy_perform(curl); curl_easy_cleanup(curl); fclose(fp); } } int main(void){ downloadFile("http://servera.com/file.txt", "filename.txt"); downloadFile("http://servera.com/file2.txt", "filename2.txt"); downloadFile("http://serverb.com/file1.txt", "filename1b.txt"); return 0; } 编译它时,我收到以下错误:

g++ test.cpp -o new

我用谷歌搜索,看看我能否找到这意味着什么,但我找不到任何我理解的东西。

如何让它发挥作用?

由于

5 个答案:

答案 0 :(得分:1)

您需要添加要链接的curl库。最有可能在编译器调用中添加-lcurl选项将完成这项工作。

答案 1 :(得分:1)

首先,该代码 C ++,但是C.这些是不同的语言,不是真正兼容。 SO上讨论的地方非常多,所以我在此不再赘述。您#include <iostream>,但不要在任何地方使用它。

然后,您所看到的是链接器错误,因为您使用 curl库,但是不要告诉链接器使用该库将函数名解析为可以是的实际符号调用。

尝试使用-lcurl;再次,这是C,恰好也是有效的C ++。您可以使用#include <iostream>代替gcc来编译此内容(如果您删除多余的g++)。

答案 2 :(得分:1)

您正确地包含libcurl的标头,但您还需要明确链接动态库。您可能需要编译如下:

g++ test.cpp -o new -lcurl

其中-lcurl告诉链接器链接到名为libcurl.so的动态库(在Unix系统上)。

看一下Using libcurl page,它实际上提供了一个名为curl-config的工具,可以帮助您构建正确的编译器命令行。在大多数Unix / Linux shell上,您可以按如下方式使用它:

g++ $(curl-config --cflags --libs) test.cpp -o new

curl-config --cflags --libs将输出正确的命令行选项。将该命令放在反引号或$(...)中意味着将此输出替换为命令行,从而有效地将命令行选项添加到命令行。

答案 3 :(得分:0)

您需要链接curl库。将-lcurl添加到调用的末尾,例如g++ -o program program.cpp -lcurl

答案 4 :(得分:0)

您需要将libcurl链接到您的程序中。使用-l参数告诉链接器您需要哪些库。 (跳过库名称的&#34; lib&#34;) g++ test.cpp -o new -lcurl