Получение cURL для работы с Visual Studios 2017
* Изменить: я получил CURL, работающий в VS 2017 на 64-битной машине, выполнив следующие действия (оригинальная проблема приведена ниже):
Сначала установите vcpkg:
- Клонируйте vcpkg, используя gitbash, в C:\Program Files
- В командной строке перейдите к C:\Program Files\vcpkg
- Запустите в командной строке: .\ Bootstrap-vcpkg.bat
- Запустите в командной строке: vcpkg integrate install
Затем используйте vcpkg и командную строку Visual Studios 2017 для установки cURL:
- Откройте командную строку VS 2017 и перейдите в папку vcpkg (где находится vcpkg.exe)
- Бежать:
vcpkg install curl:x64-windows
(обратите внимание, что загрузка и запуск могут занять около получаса, не беспокойтесь, если кажется, что он "застрял" в деталях) - После этого шага вы должны убедиться, что скручивание установлено правильно. Для этого вы должны создать новый проект в VS 2017 и попытаться включить
#include curl/curl.h
без добавления каких-либо дополнительных каталогов. Если вы не можете этого сделать, значит, что-то пошло не так с вашей установкой curl. Вы должны удалить curl (и, возможно, даже папку vcpkg и выполнить чистую установку), пока не сможете включитьcurl/curl.h
,
* Изменить: это будет работать, только если вы используете отладчик / компилятор x64 в x64! Если вы не можете включить проверку каталога curl, чтобы убедиться, что для вашей отладки установлена правильная версия Windows.
Вам также может потребоваться отключить проверку SSL-пиров:
- Поместите код
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
до запроса (см. ниже). Обратите внимание, что это необходимо только потому, что я не мог понять, как получить сертификаты для работы с curl. У меня есть еще не отвеченный пост stackru относительно этой проблемы здесь.
Вот некоторые другие шаги, которые вам могут понадобиться для запуска, но я обнаружил, что они не нужны:
- Перейдите в vcpkg\packages\curl_x64-windows\lib, чтобы найти файл libcurl.lib.
- Включите путь к libcurl.lib в каталогах дополнительных библиотек в разделе "Свойства" -> "Линкер".
- Включен libcurl.lib в Дополнительные зависимости под компоновщиком -> Ввод -> Дополнительные зависимости
- Место
CURL_STATICLIB
в Свойствах -> C/C++ -> Препроцессор -> Определения препроцессора
Вот мой теперь работающий код:
#include "curl/curl.h"
void testCurl() {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
#ifdef SKIP_PEER_VERIFICATION
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
#endif
#ifdef SKIP_HOSTNAME_VERIFICATION
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
#endif
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);
}
curl_global_cleanup();
}
int main(){
testCurl();
return 0;
}
* Изменить: Вот остальная часть объяснения моей старой проблемы, прежде чем она была решена:
Я пытаюсь использовать cURL для вызова API, чтобы я мог начать получать данные о запасах в реальном времени, но у меня возникают трудности с его использованием в VS 2017. Я попытался выполнить установку с использованием vcpckg, выполнив следующие шаги:
Согласно документации vcpkg, я теперь могу просто #include, но он не может найти папку. Если я попытаюсь включить каталог "include" из vcpkg\packages\curl_x86\include и #include, я смогу построить свой проект. Я также могу получить доступ к некоторым классам, но если я попытаюсь установить curl_global_init(CURL_GLOBAL_DEFAULT), как в этом примере, я получаю ошибки компоновщика.
2 ответа
Вы установили версию curl для x86 с помощью vcpkg (это x86 в vcpkg\packages\curl_x86\include
). Вам необходимо установить версию x64, соответствующую вашему проекту:
>vcpkg install curl:x64-windows
Здесь, в 2021 году, в Windows 10, используя текущую Visual Studio.
vcpkg install curl[*]:x64-windows
не работает. Я получаю ошибку BUILD_FAILED.
vcpkg install curl
действительно работает для меня и занимает всего ~30 секунд