Вопрос

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

У меня есть проект curllib.vcproj, добавленный в мое решение, и я настроил другие мои проекты так, чтобы они зависели от него.

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

Это было полезно?

Решение

Что ж, поскольку этот пост сильно провалился, мне пришлось копаться в этом вопросе самому.

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

Редактировать:С тех пор как я опубликовал этот вопрос, похоже, что с домашней страницы 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" следует заменить на каталог, в котором должен быть установлен 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 минут.

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

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

или

удалять /out32dll - для сборки DLL

Построение и увязка

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

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

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

Ошибка!

Ну, по крайней мере, для меня с этой версией OpenSSL.он жаловался на структуру 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

Все очень просто.

Другие советы

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

Я выполнил тест, предоставленный Sharkin, и if (vinfo-> gt; features & amp; CURL_VERSION_SSL) подтвердилось.

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

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

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

ПРИГОТОВЛЕНИЕ :неустранимая ошибка U1077:'"C:\Program Файлы (x86)\Microsoft Visual Studio 10.0 \VC\BIN\cl.EXE"' :код возврата "0x2"

Остановка.

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

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

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

В моем случае было достаточно следовать файлу curl 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.

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

"несогласованная ссылка dll curl_global_init / curl_msnprintf /..."

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

таким образом, вся строка определения должна выглядеть следующим образом:

USE_SSLEY;USE_OPENSSL;CURL_STATICLIB.

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

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

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

\ fatal error C1083: Cannot open include
file: 'stdlib.h': No such file or directory
NMAKE: fatal error U1077::return code 

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

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

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

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

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

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

  

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

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

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

<Ол>
  • Установите libcurl
  • Установите OpenSSl
  • Сборка libcurl с помощью OpenSSL
  • <Ч>

    Установка libcurl

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

    Извлеките архив и откройте 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 - > Общие измените Дополнительные каталоги библиотек и добавьте путь к вашему каталогу OpenSSL + \ lib . В моем случае это C: \ OpenSSL-Win32 \ lib .

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

    Щелкните правой кнопкой мыши проект libcurl и сделайте то же, что и на предыдущем шаге, добавьте каталог OpenSSL + \ lib в дополнительные каталоги библиотек в разделе < code> Linker - > Общие .

    В разделе C / C ++ - > Общие , добавьте C: \ OpenSSL-Win32 \ include в Дополнительные каталоги включения .

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

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

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

    Если конфигурация сборки DLL Debug - DLL OpenSSL еще выбрана, перейдите в раздел Build - > Построить решение .

    Скопируйте два файла 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 и т. Д.), Значит, ваша сборка прошла успешно.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top