Я использую libcurl в приложении Win32 C++.
У меня есть проект curllib.vcproj, добавленный в мое решение, и я настроил другие мои проекты, чтобы они зависели от него.
Как мне создать его с включенной поддержкой SSL?
@fa Возможно, вы захотите опубликовать свой комментарий как полный ответ. Некоторые люди могут пропустить это в разделах комментариев, и это действительно самый простой способ перейти на Windows. Спасибо за совет.





Что ж, поскольку этот пост потерпел неудачу, мне пришлось самому разобраться в этом вопросе.
Также ознакомьтесь с другими ответами и комментариями для получения дополнительной информации о других версиях и т. д.
Обновлено: с тех пор, как я опубликовал этот вопрос, похоже, есть готовые двоичные файлы, доступные с домашней страницы 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
Сборка и связывание
Теперь вернемся в визуальную студию, укажите библиотеки и укажите путь для заголовков. Включаемые файлы находятся в дистрибутив / inc32 / openssl.
Не забудьте добавить libeay32.lib и ssleay32.lib в качестве входных данных компоновщика.
Перестройте проект libcurl.
Ошибка!
По крайней мере, для меня с этой версией OpenSSL. он жаловался на struct typedef в одном из заголовков OpenSSL. Я не смог найти никакой информации по этому поводу. После часа поисков в Google я нарушил свой собственный принцип и закомментировал typedef из заголовка OpenSSL, и, к счастью, libcurl не использовал этот символ, поэтому он построился нормально.
Обновление: как указал Джейсон, эта проблема, похоже, исчезла с версии 1.0.0a.
Теперь, чтобы убедиться, что для libcurl включена поддержка SSL, запустите следующий код:
curl_version_info_data * vinfo = curl_version_info( CURLVERSION_NOW );
if ( vinfo->features & CURL_VERSION_SSL )
// SSL support enabled
else
// No SSL
Просто как тот.
Спасибо. Жаль, что ребята из libcurl не предоставляют что-то готовое для использования в Windows.
с openssl-1.0.0.a вам не нужно закомментировать typedef (последний шаг). Просто работает.
Не могли бы вы обновить свой (потрясающий) ответ, чтобы напомнить людям о необходимости добавить libeay32.lib и ssleay32.lib во вход компоновщика для статических сборок?
Кроме того, чтобы найти строку версии Windows, просто используйте Пуск | Беги | winver.exe.
В последней версии libcurl (2012) вы можете создавать с встроенной поддержкой SSL для окон, используя символы препроцессора USE_WINDOWS_SSPI и USE_SCHANNEL вместо символов OpenSSL.
я сделал "do_nt.bat" для windows 7 rc7100 не забудьте "nmake -f ms \ nt.mak install", чтобы правильно скопировать заголовки
спасибо, это очень помогло
Пара замечаний в ответ и / или в дополнение к вышесказанному ..
Во-первых, если вы не хотите связываться с ActivePerl, Клубничный перл великолепен и отлично подходит для этого.
Во-вторых, вместо использования do_ms.bat я бы порекомендовал предпочесть do_masm, если это возможно, поскольку, согласно INSTALL.W32,
This is worth doing because it will result in faster code: for example it will typically result in a 2 times speedup in the RSA routines.
Кроме того, сборка 0,9,8 л (L) OpenSSL была кошмаром, поэтому я в конце концов сдался и вернулся к Бег 0,9,8 км, который без проблем собирал и связывался (статически) с libcurl 1.9.
При компиляции OpenSSL 1.0.0 в Windows с Visual Studio 2010 в конечном итоге выдавалась ошибка 0x2:
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 10.0 \VC\BIN\cl.EXE"' : return code '0x2'
Stop.
Похоже, что эта ошибка будет выдана из-за флага в файле конфигурации perl, а именно -WX. Как указано в документации MSDN:
Treats all compiler warnings as errors. For a new project, it may be best to use /WX in all compilations; resolving all warnings will ensure the fewest possible hard-to-find code defects.
После удаления вхождений -WX в файле конфигурации и повторного ввода команд, указанных здесь, он построился нормально и прошел все тесты.
Или можно исправить переопределение, вызвавшее предупреждение. См. Отчет об ошибке на rt.openssl.org/Ticket/…
Возможно, это не тот ответ, который кто-то ищет, но я просто загрузил предварительно скомпилированные библиотеки DLL из эта ссылка, найденные на http://curl.haxx.se/download.html
Я провел тест, который предоставил Sharkin, и if ( vinfo->features & CURL_VERSION_SSL ) подтвердился.
красивый! Я предполагаю, что эти корзины были добавлены с тех пор, как я опубликовал Q. Это действительно было то, что я тогда искал.
Я загрузил упомянутую предварительно скомпилированную dll и добавил libcurl.dll, libeay32.dll и libssl32.dll в качестве дополнительных зависимостей компоновщика, но связывание не удается с ошибкой 1> E: \ curl-7.21.4-ssl-sspi-zlib-static- bin-w32 \ libcurl.dll: фатальная ошибка LNK1107: недопустимый или поврежденный файл: невозможно прочитать на 0x308
Если вы выполняете сборку с помощью Visual Studio IDE и получаете 58 нечетных предупреждений, подобных
"несогласованная связь DLL curl_global_init / curl_msnprintf / ..."
вы должны добавить CURL_STATICLIB в определения препроцессора.
поэтому вся строка определения должна выглядеть так:
USE_SSLEAY; USE_OPENSSL; CURL_STATICLIB.
При этом все предупреждения исчезнут.
Некоторые проигнорируют предупреждения и продолжат использовать библиотеки, но затем получат соответствующие * ошибки *, такие как 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.
Следуя совету Роберта Ошлера, вот мой ответ на вопрос:
Вы можете создать последнюю версию libcurl (2012) со встроенной поддержкой SSL для окон, используя символы препроцессора: USE_WINDOWS_SSPI и USE_SCHANNEL вместо символов OpenSSL.
В моем случае было достаточно файла README для завивки. Моя конфигурация следующая:
curl-7.57.0\projectsopenssl, отложите в сторону папку curl, это важно, поскольку вы откроете проект VS, который ожидает найти там openssl.build-openssl.bat для компиляции openSSL. С моими настройками получилось так: .\build-openssl.bat vc14 x64 release ..\..\openssl\.\build-openssl.bat -help, чтобы узнать больше о параметрах.
После этого вы можете увидеть, что OpenSSL был скомпилирован, поскольку у вас появилась новая папка здесь: openssl\build\Win64curl-7.57.0\projects\Windows\VC14\curl-all.sln.LIB Release - LIB OpenSSL).curl-7.57.0\build\Win64\VC14\LIB Release - LIB OpenSSL\libcurl.lib.CURL_STATICLIB в своем собственном проекте.CURL_DISABLE_LDAPдо при компиляции libcurl.спасибо, это прекрасно сработало! Одна вещь, которую я хотел бы указать для всех, кто использует это, - обязательно установите для проекта Visual Studio правильную конфигурацию, я случайно выбрал OpenSSL и libSSH2 (facepalm!)
Перейдите в страница загрузки libcurl и загрузите ZIP-файл в Исходные архивы. В моем случае это называется curl-7.58.0.zip
Распакуйте архив и откройте projects/Windows/VC15/curl_all.sln с помощью Visual Studio.
Загрузите двоичный файл OpenSSL для Windows. В моем случае я загрузил файл установщика Windows Win32 OpenSSL v1.1.0g из Распространение Shining Light Productions.
Папка установки для меня - C:\OpenSSL-Win32.
В файле решения 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 и т. д.), Значит, ваша сборка прошла успешно.
В последней версии libcurl (2012) вы можете создавать с встроенной поддержкой SSL для окон, используя символы препроцессора USE_WINDOWS_SSPI и USE_SCHANNEL вместо символов OpenSSL.