Я использую libcurl в приложении Win32 С++.
У меня есть проект curllib.vcproj, добавленный в мое решение, и заставьте его другие проекты зависеть от него.
Как мне создать его с поддержкой SSL?
Я использую libcurl в приложении Win32 С++.
У меня есть проект curllib.vcproj, добавленный в мое решение, и заставьте его другие проекты зависеть от него.
Как мне создать его с поддержкой SSL?
Ну, так как этот пост плохо сработал, мне пришлось самому разобраться в этом вопросе.
Также ознакомьтесь с другими ответами и комментариями для дополнительной информации о других версиях и т.д.
РЕДАКТИРОВАТЬ: Поскольку я разместил этот Q, кажется, что есть готовые двоичные файлы, доступные на домашней странице curl. Проверьте ответ Джеймса.
-
Preprocessor
Следующие два символа должны быть переданы в препроцессор, чтобы включить 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 минут на моем ноутбуке.
Когда компиляция завершена, библиотеки или двоичные файлы были помещены в:
distroot/out32 - для сборки статической библиотеки
или
distroot/out32dll - для сборки DLL
Создание и компоновка
Теперь вернемся к визуальной студии и укажите библиотеки и включите путь для заголовков. Файлы include находятся в distroot/inc32/openssl.
Не забудьте добавить libeay32.lib и ssleay32.lib в качестве вложения компоновщика.
Восстановите проект 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->features & CURL_VERSION_SSL )
оказался верным.
При компиляции 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, а именно -WX. Как указано в документации MSDN:
Рассматривает все предупреждения компилятора как ошибки. Для нового проекта лучше всего использовать /WX во всех компиляциях; разрешение всех предупреждений обеспечит наименьшее количество труднодоступных дефектов кода.
После удаления -WX-вхождений в файле Configure и повторного ввода команд, указанных здесь, он построил штраф и прошел все тесты.
Следуя совету Роберта Ошлера, вот мой комментарий к вопросу как ответ:
Вы можете создать недавний libcurl (2012) с собственной поддержкой SSL для Windows, используя символы препроцессора: USE_WINDOWS_SSPI и USE_SCHANNEL вместо OpenSSL.
\ 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 install" правильно скопировать заголовки
спасибо, что это очень помогло
Пара примечаний в ответ на и/или в дополнение к вышеуказанным..
Во-первых, если вы не хотите общаться с ActivePerl, Strawberry Perl потрясающий и отлично работает для этого.
Во-вторых, вместо использования do_ms.bat, я бы рекомендовал, по возможности, предпочесть do_masm, поскольку, согласно INSTALL.W32,
Это стоит того, потому что это будет приводят к более быстрому коду: например, это как правило, приводят к 2 раза ускорение в процедурах RSA.
Кроме того, построение 0.9.8l (L) OpenSSL было кошмаром, поэтому я в конце концов отказался и вернулся к 0.9.8k, который построил и связал (статически) с libcurl 1.9 без проблем.
Если вы создаете с помощью Visual Studio IDE и получаете 58 нечетных предупреждений, таких как
"несовместимая связь dll curl_global_init/curl_msnprintf/..."
вы должны добавить CURL_STATICLIB в определения препроцессора.
поэтому вся строка определения должна выглядеть так:
USE_SSLEAY; USE_OPENSSL;. CURL_STATICLIB
При этом все предупреждения исчезнут.
Некоторые будут игнорировать предупреждения и продолжать использовать libs, но затем получат соответствующую * ошибку * s, такую как curl_global_init/curl_msnprintf. Это может быть очень неприятно.
Надеюсь, это поможет кому-то.
В моем случае следуйте за файлом README для завивки. Моя конфигурация такова:
curl-7.57.0\projects
openssl
, отложите в сторону папку curl, это важно, поскольку вы откроете проект VS, который ожидает найти openssl.build-openssl.bat
для выполнения компиляции openSSL. С моими настройками это стало следующим: .\build-openssl.bat vc14 x64 release ..\..\openssl\
.\build-openssl.bat -help
, чтобы узнать больше о параметрах. openssl\build\Win64
curl-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.