我不知道如何將curl包含到我的項目中。我讀過這個Getting LibCurl to work with Visual Studio 2013,但在我的文件夾中curl(從https://curl.haxx.se/download.html#Win64 - Win64 x86_64 7zip)只有libcurl.dll在bin文件夾中。在lib文件夾中,只有libcurl.a和libcurldll.a。將libcurl包含到Microsoft Visual Studio 2015中
我已經添加了包括路徑VC++目錄 - > Inlcude目錄,並嘗試編譯這段代碼:
#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.h>
struct url_data {
size_t size;
char* data;
};
size_t write_data(void *ptr, size_t size, size_t nmemb, struct url_data *data) {
size_t index = data->size;
size_t n = (size * nmemb);
char* tmp;
data->size += (size * nmemb);
#ifdef DEBUG
fprintf(stderr, "data at %p size=%ld nmemb=%ld\n", ptr, size, nmemb);
#endif
tmp = realloc(data->data, data->size + 1); /* +1 for '\0' */
if(tmp) {
data->data = tmp;
} else {
if(data->data) {
free(data->data);
}
fprintf(stderr, "Failed to allocate memory.\n");
return 0;
}
memcpy((data->data + index), ptr, n);
data->data[data->size] = '\0';
return size * nmemb;
}
char *handle_url(char* url) {
CURL *curl;
struct url_data data;
data.size = 0;
data.data = malloc(4096); /* reasonable size initial buffer */
if(NULL == data.data) {
fprintf(stderr, "Failed to allocate memory.\n");
return NULL;
}
data.data[0] = '\0';
CURLcode res;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_easy_cleanup(curl);
}
return data.data;
}
int main(int argc, char* argv[]) {
char* data;
if(argc < 2) {
fprintf(stderr, "Must provide URL to fetch.\n");
return 1;
}
data = handle_url(argv[1]);
if(data) {
printf("%s\n", data);
free(data);
}
return 0;
}
,但我得到的錯誤是這樣的:
解析的外部符號__imp_curl_easy_strerror在函數中引用handle_url
爲什麼沒有合適的'.lib'文件,如果這是Microsoft和Windows? '.a'文件通常用於Unix/Linux。 –
是的,這個擴展名被gcc/clang/llvm編譯器用作庫的默認值,但擴展名僅僅是文件名的一部分。我沒有機會嘗試將這些文件提供給VS(現在在macOS上),但我認爲可以鏈接到.a文件(假設它們由VS編譯並重命名爲* .a) – dmsovetov
P.S.看起來像.a和.lib文件使用相同的文件格式http://stackoverflow.com/a/2819992/5719384,只是一個編譯對象文件的存檔 – dmsovetov