Сборка libcurl с поддержкой SSL в Windows - PullRequest
42 голосов
/ 13 октября 2008

Я использую libcurl в приложении Win32 C ++.

Мне добавили проект curllib.vcproj в моё решение и настроили другие мои проекты в зависимости от него.

Как мне создать его с включенной поддержкой SSL?

Ответы [ 10 ]

48 голосов
/ 14 октября 2008

Ну, так как этот пост потерпел неудачу, мне пришлось самому разобраться в этом вопросе.

Также ознакомьтесь с другими ответами и комментариями для получения дополнительной информации о других версиях и т. Д.

РЕДАКТИРОВАТЬ: С тех пор как я опубликовал этот Q, кажется, готовые двоичные файлы доступны с домашней страницы curl. Проверьте Джеймс ответ .

Итак, вот так:

-

Препроцессор

Следующие два символа должны быть введены в препроцессор для включения SSL для libcurl:

USE_SSLEAY
USE_OPENSSL

(libcurl использует OpenSSL для поддержки SSL)

В качестве альтернативы символы могут быть добавлены непосредственно в файл с именем setup.h в libcurl, но я не слишком рад изменению кода в сторонних дистрибутивах, если мне действительно не нужно.

Перестраивая библиотеку libcurl, я теперь получил несколько ошибок о том, что файлы включений OpenSSL не найдены. Естественно, поскольку я еще не настроил дистрибутив OpenSSL должным образом.

Компиляция двоичных файлов OpenSSL

Я скачал дистрибутив исходного кода OpenSSL 0.9.8 и распаковал его.

В корне исходного дистрибутива есть файл INSTALL.W32, который описывает, как скомпилировать двоичные файлы OpenSSL. В цепочке сборки требуется perl, поэтому я установил последнюю версию ActivePerl.

У меня были некоторые проблемы со сборкой, которая может быть неприменима ко всем системам, но я рассмотрю ее здесь на случай, если кто-то испытает то же самое.

Согласно INSTALL.W32:

Запустите следующие задачи командной строки с текущим каталогом, установленным в корневой каталог распространения:

1> perl Configure VC-WIN32 --prefix=c:/some/openssl/dir

(Где "c: / some / openssl / dir" должен быть заменен на dir, где должен быть установлен OpenSSL. Не используйте пробелы в этом пути. В этом случае компиляция в дальнейшем будет неудачной)

2> ms\do_ms

Для меня этот шаг поначалу был неудачным, так как мне не хватало переменных среды OSVERSION и TARGETCPU. Я установил их на 5.1.2600 и x86 соответственно. Вы можете получить жалобу на то, что OSVERSION «ненормальная», но посмотрите внимательно, эта ошибка относится к WinCE и не влияет на установку Win32. Чтобы узнать версию вашей ОС, запустите команду 'ver' из командной строки или запустите winver.exe.

3> nmake -f ms\nt.mak (for static library)

или

3> nmake -f ms\ntdll.mak (for DLL)

Источник теперь компилируется. На моем ноутбуке ушло около 5 минут.

Когда компиляция завершена, библиотеки или двоичные файлы были помещены в:

distroot / out32 - для статической сборки библиотеки

или

distroot / out32dll - для сборки DLL

Строительство и связь

Теперь вернемся к visual studio, назовите libs и укажите путь для заголовков. Включаемые файлы находятся в distroot / inc32 / openssl .

Не забудьте добавить libeay32.lib и ssleay32.lib в качестве входных данных компоновщика.

Перестройте проект libcurl.

Ошибка!

Ну, по крайней мере, для меня с этой версией OpenSSL. он жаловался на struct typedef в одном из заголовков OpenSSL. Я не мог найти никакой информации по этому вопросу. После часа поиска в Google я нарушил свой собственный принцип и закомментировал typedef из заголовка OpenSSL, и, к счастью, libcurl не использовал этот символ, поэтому он прекрасно работал.

Обновление: как указал Джейсон, эта проблема, похоже, исчезла с версии 1.0.0a.

Теперь, чтобы подтвердить, что поддержка SSL включена для libcurl, запустите следующий код:

curl_version_info_data * vinfo = curl_version_info( CURLVERSION_NOW );
if( vinfo->features & CURL_VERSION_SSL )
    // SSL support enabled
else
    // No SSL

Просто так.

8 голосов
/ 26 февраля 2011

Возможно, это не тот ответ, который кто-то ищет, но я просто скачал предварительно скомпилированные библиотеки DLL из по этой ссылке , найденной по адресу http://curl.haxx.se/download.html

Я выполнил тест, который предоставил Шаркин, и if( vinfo->features & CURL_VERSION_SSL ) подтвердился.

5 голосов
/ 09 октября 2014

Следуя совету Роберта Ошлера, вот мой комментарий на вопрос в качестве ответа:

Вы можете собрать последнюю версию libcurl (2012) с собственной поддержкой SSL для окон, используя символы препроцессора: USE_WINDOWS_SSPI и USE_SCHANNEL вместо OpenSSL.

5 голосов
/ 16 мая 2010

При компиляции OpenSSL 1.0.0 в Windows с Visual Studio 2010 в конечном итоге выдается ошибка 0x2:

NMAKE: фатальная ошибка U1077: '"C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ BIN \ cl.EXE "': код возврата' 0x2 '

Стоп.

Похоже, эта ошибка возникнет из-за флага в файле Perl Configure, а именно -WX. Как указано в документации MSDN:

Обрабатывает все предупреждения компилятора как ошибки. Для нового проекта лучше всего использовать / WX во всех компиляциях; устранение всех предупреждений обеспечит наименьшее количество трудно обнаруживаемых дефектов кода.

После удаления вхождений -WX в файле Configure и повторного ввода указанных команд здесь все было в порядке и прошло все тесты.

3 голосов
/ 05 декабря 2017

В моем случае следования скручиваемому файлу README было достаточно.
Моя конфигурация следующая:

  • Visual Studio 2015 (VC14)
  • Статическая библиотека
  • Win64
  • curl версия 7.57.0
  • OpenSSL 1.0.2

Компиляция libCurl

  1. Загрузите исходный код libcurl: https://curl.haxx.se/download.html
  2. Распакуйте файл и перейдите в папку curl-7.57.0\projects
  3. Откройте файл README и следуйте инструкциям, это заставит меня сделать следующее:
    • Скачано OpenSSL
    • Извлеките его и переименуйте в openssl, отложите в сторону папку curl , это важно, так как вы откроете проект VS, который ожидает найти openssl там.
    • Установка Perl
    • Запустите утилиту build-openssl.bat, чтобы выполнить компиляцию openSSL. С моими настройками это стало следующим:
      .\build-openssl.bat vc14 x64 release ..\..\openssl\
      просто запускает .\build-openssl.bat -help, чтобы узнать больше о параметрах.
      После этого вы можете увидеть, что OpenSSL скомпилирован, поскольку вы получили новую папку здесь: openssl\build\Win64
  4. Открыть проект Visual Studio curl-7.57.0\projects\Windows\VC14\curl-all.sln
  5. Обязательно установите для проекта Visual Studio нужную вам конфигурацию сборки (LIB Release - LIB OpenSSL в моем случае)
  6. Построить все
  7. Библиотека расположена по адресу curl-7.57.0\build\Win64\VC14\LIB Release - LIB OpenSSL\libcurl.lib

Примечания

  • Не забудьте определить препроцессор CURL_STATICLIB в вашем собственном проекте
  • Со статической библиотекой вам придется ссылаться на зависимости libcurl, см. этот ответ
  • Возможно, вы не захотите зависеть от LDAP , в этом случае вы можете отключить его, установив препроцессор CURL_DISABLE_LDAP до компиляции libcurl.
2 голосов
/ 17 марта 2012
\ fatal error C1083: Cannot open include
file: 'stdlib.h': No such file or directory
NMAKE: fatal error U1077::return code 

Эту ошибку можно устранить, выполнив vcvarsall.bat в Visual Studio.

2 голосов
/ 16 марта 2012

Если вы собираете с помощью Visual Studio IDE и получаете 58 странных предупреждений, таких как

"несогласованная связь dll curl_global_init / curl_msnprintf /..."

Вы должны добавить CURL_STATICLIB к определениям препроцессора.

поэтому вся строка определения должна выглядеть так:

USE_SSLEAY; USE_OPENSSL; CURL_STATICLIB

.

При этом все предупреждения исчезнут.

Некоторые игнорировали бы предупреждения и продолжали использовать библиотеки, но затем получали бы * error * s, такие как curl_global_init / curl_msnprintf Это может быть очень раздражающим.

Надеюсь, это кому-нибудь поможет.

1 голос
/ 09 февраля 2018

Как собрать libcurl C / C ++ с OpenSSL (поддержка SSL) в Windows

  1. Установить libcurl
  2. Установить OpenSSl
  3. Сборка libcurl с OpenSSL

Установка libcurl

Перейдите на страницу загрузки libcurl и загрузите ZIP-файл в Исходные архивы . В моем случае это называется curl-7.58.0.zip

Распакуйте архив и откройте projects/Windows/VC15/curl_all.sln в Visual Studio.

Установка OpenSSL

Загрузите бинарный файл Windows OpenSSL. В моем случае я скачал установочный файл Windows Win32 OpenSSL v1.1.0g из дистрибутива Shining Light Productions .

Для меня папка установки C:\OpenSSL-Win32.

Сборка libcurl с OpenSSL

В файле решения curl_all.sln Visual Studio измените конфигурацию сборки на DLL Debug - DLL OpenSSL.

В обозревателе решений щелкните правой кнопкой мыши проект curl и перейдите в Свойства.

Под Linker -> General изменить Additional Library Directories и добавить путь к вашему OpenSSL directory + \lib. В моем случае это C:\OpenSSL-Win32\lib.

Применить и закрыть окно свойств.

Щелкните правой кнопкой мыши проект libcurl и сделайте то же самое, что и предыдущий шаг, добавьте OpenSSL directory + \lib к Additional Library Directories в Linker -> General.

Под C/C++ -> General, добавьте C:\OpenSSL-Win32\include к Additional Include Directories.

Наконец перейдите к Linker -> Input и измените Additional Dependencies. Замените все файлы lib на следующие:

ws2_32.lib
wldap32.lib
openssl.lib
libssl.lib
libcrypto.lib

Применить и закрыть окно свойств.

С выбранной конфигурацией DLL Debug - DLL OpenSSL перейдите к Build -> Build Solution.

Скопируйте два файла dll libcrypto-1_1.dll и libssl-1_1.dll из каталога bin OpenSSL (C:\OpenSSL-Win32\bin) в только что созданный каталог сборки curl-7.58.0\build\Win32\VC15\DLL Debug - DLL OpenSSL.

Проверка сборки

Внутри каталога сборки запустите curld.exe. Если он работает без ошибок (отсутствует dll и т. Д.), То ваша сборка прошла успешно.

1 голос
/ 20 января 2010

Пара заметок в ответ и / или в дополнение к вышесказанному ..

Во-первых, если вы не хотите связываться с ActivePerl, Strawberry Perl потрясающий и отлично сработал для этого.

Во-вторых, вместо использования do_ms .bat, я бы порекомендовал, если возможно, выбрать do_masm , так как, согласно INSTALL.W32,

Это стоит сделать, потому что это будет привести к более быстрому коду: например будет обычно в 2 раза ускорение в подпрограммах RSA.

Кроме того, сборка 0.9.8l (L) OpenSSL была кошмаром, поэтому я в конце концов сдался и вернулся к 0.9.8k , который собирался и статически связывался с libcurl 1.9 без вопроса.

1 голос
/ 09 сентября 2009

я сделал "do_nt.bat" для windows 7 rc7100 не забудьте "nmake -f ms \ nt.mak install", чтобы правильно скопировать заголовки

спасибо, это очень помогло

...