C++下载多个文件 我对C++非常陌生,我下载并编译了几个例子,没有问题。

C++下载多个文件 我对C++非常陌生,我下载并编译了几个例子,没有问题。,c++,c,libcurl,C++,C,Libcurl,现在我尝试从服务器下载10个文件,并将每个文件写入不同的位置/文件名 看看我尝试使用的代码: #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; w

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

看看我尝试使用的代码:

#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;
}
我在谷歌上搜索了一下,看看是否能找到这意味着什么,但我没有找到任何我能理解的东西

我怎样才能让它工作


谢谢

您需要添加要链接的curl库。很可能向编译器调用中添加-lcurl选项就可以完成这项工作。

您需要链接curl库。在调用结束时添加-LCURL,比如G++-O程序。CPP-LCURL.< /P> < P>首先,该代码不是C++,而是C语言,它们是不同的语言,它们不是真正兼容的。这里有很多地方讨论这个问题,所以我这里不详细介绍。包括,但不要在任何地方使用

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


尝试使用-lcurl;同样,这是C,并且恰巧也是有效的C++。如果将多余的include与gcc一起删除而不是g++,则可以编译此文件。

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

您正确地包含了libcurl的头,但是还需要显式地链接到动态库。您可能需要按如下方式编译:

g++ test.cpp -o new -lcurl
g++ $(curl-config --cflags --libs) test.cpp -o new
其中-lcurl告诉链接器在Unix系统上链接名为libcurl.so的动态库

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

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

curl config-cflags-libs将输出正确的命令行选项。将该命令放置在backticks或$。。。这意味着此输出将被替换到您的命令行,从而有效地将命令行选项添加到您的命令行。

@MarcusMüller谢谢,您比我更快: