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