winapi - win32 - instalar curl en windows 10
Construyendo libcurl con soporte SSL en Windows (10)
Estoy usando libcurl en una aplicación Win32 C ++.
Tengo el proyecto curllib.vcproj agregado a mi solución y configuro mis otros proyectos para que dependan de él.
¿Cómo lo construyo con soporte SSL habilitado?
Cómo compilar libcurl C / C ++ con OpenSSL (compatibilidad con SSL) en Windows
- Instalar libcurl
- Instalar OpenSSl
- Construye libcurl con OpenSSL
Instalando libcurl
Vaya a la https://curl.haxx.se/download.html y no descargue el archivo ZIP en Archivos de origen . En mi caso, se llama curl-7.58.0.zip
Extraiga el archivo y abra projects/Windows/VC15/curl_all.sln
con Visual Studio.
Instalando OpenSSL
Descargue el binario de Windows de OpenSSL. En mi caso, descargué el archivo de instalación de Windows Win32 OpenSSL v1.1.0g
de la distribución de Shining Light Productions .
La carpeta de instalación para mí es C:/OpenSSL-Win32
.
Construyendo libcurl con OpenSSL
En el archivo de solución de Visual Studio curl_all.sln
, cambie la configuración de compilación a DLL Debug - DLL OpenSSL
.
En el Explorador de soluciones, haga clic derecho en el curl
del proyecto y vaya a Propiedades.
En Linker -> General
modifique los Additional Library Directories
y agregue la ruta a su OpenSSL directory + /lib
. En mi caso, esto es C:/OpenSSL-Win32/lib
.
Aplicar y cerrar la ventana de propiedades.
Haga clic con el botón derecho en el proyecto libcurl
y haga lo mismo que en el paso anterior, agregue el OpenSSL directory + /lib
a los Additional Library Directories
en Linker -> General
.
En C/C++ -> General
, agregue C:/OpenSSL-Win32/include
a los Additional Include Directories
.
Finalmente vaya a Linker -> Input
y modifique las Additional Dependencies
. Reemplaza todos los archivos lib por lo siguiente:
ws2_32.lib
wldap32.lib
openssl.lib
libssl.lib
libcrypto.lib
Aplicar y cerrar la ventana de propiedades.
Con la DLL Debug - DLL OpenSSL
, aún se ha seleccionado la configuración de compilación DLL Debug - DLL OpenSSL
, vaya a Build -> Build Solution
.
Copie los dos archivos dll libcrypto-1_1.dll
y libssl-1_1.dll
del directorio bin de OpenSSL ( C:/OpenSSL-Win32/bin
) en el directorio de creación recién creado curl-7.58.0/build/Win32/VC15/DLL Debug - DLL OpenSSL
.
Validar la construcción
Dentro del directorio de compilación, ejecute curld.exe
. Si se ejecuta sin errores (pérdida de dll, etc.), entonces su compilación fue exitosa.
Al compilar OpenSSL 1.0.0 en Windows con Visual Studio 2010, eventualmente lanzó un error 0x2:
NMAKE: error fatal U1077: ''"C: / Archivos de programa (x86) / Microsoft Visual Studio 10.0 / VC / BIN / cl.EXE"'': código de retorno ''0x2''
Detener.
Parece que este error se producirá debido a un indicador en el archivo Perl Configure, a saber, -WX. Como dice la documentación de MSDN:
Trata todas las advertencias del compilador como errores. Para un nuevo proyecto, puede ser mejor usar / WX en todas las compilaciones; la resolución de todas las advertencias asegurará la menor cantidad posible de defectos de código difíciles de encontrar.
Después de eliminar las ocurrencias -WX en el archivo Configure y volver a ingresar los comandos here indicados, compiló bien y pasó todas las pruebas.
Bueno, ya que este post falló mal, tuve que investigar el asunto yo mismo.
También consulte las otras respuestas y comentarios para obtener información adicional sobre otras versiones, etc.
EDITAR: Desde que publiqué esta Q, parece que hay binarios listos para usar disponibles desde la página principal de Curl. Mira la respuesta de James .
Así que aquí va:
-
Preprocesador
Los dos símbolos siguientes se deben alimentar al preprocesador para habilitar SSL para libcurl:
USE_SSLEAY
USE_OPENSSL
(libcurl usa OpenSSL para soporte SSL)
Alternativamente, los símbolos se pueden agregar directamente a un archivo llamado setup.h en libcurl, pero no estoy muy contento con la modificación del código en distribuciones de terceros a menos que realmente tenga que hacerlo.
Reconstruyendo la biblioteca de libcurl, ahora recibí algunos errores sobre OpenSSL que incluyen archivos que no se encuentran. Naturalmente, dado que aún no configuré la distribución OpenSSL correctamente.
Compilando binarios OpenSSL
Descargué la distribución de fuente OpenSSL 0.9.8 y la desempaqué.
En la raíz de la distribución de origen hay un archivo llamado INSTALL.W32 que describe cómo compilar los binarios de OpenSSL. La cadena de compilación requiere perl, así que instalé la última versión de ActivePerl.
Tuve algunos problemas con la compilación, que podría no ser aplicable a todos los sistemas, pero la revisaré aquí en caso de que alguien experimente lo mismo.
De acuerdo con INSTALL.W32:
Ejecute las siguientes tareas de línea de comandos con el directorio actual configurado en la raíz de distribución de origen:
1> perl Configure VC-WIN32 --prefix=c:/some/openssl/dir
(Donde "c: / some / openssl / dir" debe ser reemplazado por el directorio donde se debe instalar OpenSSL. No use espacios en esta ruta. La compilación más adelante fallará en ese caso)
2> ms/do_ms
Para mí, este paso no tuvo éxito al principio, ya que carecía de las variables de entorno OSVERSION y TARGETCPU. Los establecí en 5.1.2600 y x86 respectivamente. Puede recibir una queja acerca de que OSVERSION está "loco", pero mire más de cerca, este error es para WinCE y no afecta la configuración de Win32. Para obtener su versión del sistema operativo, ejecute el comando ''ver'' desde un símbolo del sistema o ejecute winver.exe.
3> nmake -f ms/nt.mak (for static library)
o
3> nmake -f ms/ntdll.mak (for DLL)
La fuente ahora compila. Tomó aproximadamente 5 minutos en mi computadora portátil.
Cuando se completa la compilación, las libs o binarios se han colocado en:
distroot / out32 - para la construcción de la biblioteca estática
o
distroot / out32dll - para la construcción de DLL
Construyendo y enlazando
Ahora, regrese a Visual Studio y señale las librerías e incluya la ruta de los encabezados. Los archivos de inclusión se encuentran en distroot / inc32 / openssl .
Recuerde agregar libeay32.lib y ssleay32.lib como entrada del enlazador.
Reconstruye el proyecto libcurl.
¡Error!
Bueno, al menos para mí con esta versión de OpenSSL. se quejaba de una struct typedef en uno de los encabezados de OpenSSL. No pude encontrar ninguna información sobre esto. Después de una hora de búsqueda en Google rompí mi propio principio y comenté el typedef del encabezado OpenSSL, y afortunadamente libcurl no estaba usando ese símbolo, por lo que me pareció bien.
Actualización: Como señaló Jason, este problema parece haber desaparecido a partir de la versión 1.0.0a.
Ahora, para confirmar que el soporte SSL está habilitado para libcurl, ejecute el siguiente código:
curl_version_info_data * vinfo = curl_version_info( CURLVERSION_NOW );
if( vinfo->features & CURL_VERSION_SSL )
// SSL support enabled
else
// No SSL
Simple como eso.
En mi caso, seguir el archivo README curl fue suficiente.
Mi configuración es la siguiente:
- Visual Studio 2015 (VC14)
- Biblioteca estática
- Win64
- curl versión 7.57.0
- OpenSSL 1.0.2
Compilación de libCurl
- Descargue la fuente libcurl allí: https://curl.haxx.se/download.html
- Descomprime el archivo y ve a la carpeta
curl-7.57.0/projects
- Abra el archivo README y siga las instrucciones, esto me lleva a hacer lo siguiente:
- OpenSSL descargado
- Extraiga y cambie el nombre a
openssl
, déjelo a un lado de la carpeta curl , esto es importante ya que abrirá el proyecto VS que espera encontrar openssl allí. - Instalar Perl
- Ejecute la utilidad
build-openssl.bat
para realizar la compilación de openSSL. Con mi configuración, esto se convirtió en lo siguiente:
./build-openssl.bat vc14 x64 release ../../openssl/
simplemente ejecuta./build-openssl.bat -help
para saber más sobre los parámetros.
Después de eso, puede ver que OpenSSL se ha compilado ya que tiene una nueva carpeta aquí:openssl/build/Win64
- Abra el proyecto de Visual Studio
curl-7.57.0/projects/Windows/VC14/curl-all.sln
- Asegúrese de establecer el proyecto de estudio visual con la configuración de compilación que necesita (
LIB Release - LIB OpenSSL
en mi caso) - Construir todo
- La biblioteca se encuentra en
curl-7.57.0/build/Win64/VC14/LIB Release - LIB OpenSSL/libcurl.lib
Observaciones
- No olvide definir el preprocesador
CURL_STATICLIB
en su propio proyecto - Con la biblioteca estática, tendrá que enlazar con las dependencias de libcurl, vea esta respuesta
- Es posible que no desee depender de LDAP , en ese caso puede desactivarlo configurando el preprocesador
CURL_DISABLE_LDAP
antes de compilar libcurl.
Hice "do_nt.bat" para Windows 7 rc7100 no olvide "nmake -f ms / nt.mak install" para copiar los encabezados correctamente
gracias esto ayudó mucho
Si construye con Visual Studio IDE y recibe 58 advertencias impares como
"enlace inconsistente dll curl_global_init / curl_msnprintf / ..."
debe agregar CURL_STATICLIB a las definiciones de preprocesador.
por lo que toda la línea de definición debería verse así:
USE_SSLEAY; USE_OPENSSL; CURL_STATICLIB.
Con esto, toda la advertencia desaparecerá.
Algunos ignorarían las advertencias y seguirían usando las libs, pero luego obtendrían los * errors * correspondientes como los de curl_global_init / curl_msnprintf. Puede ser muy molesto
Espero que pueda ayudar a alguien.
Siguiendo el consejo de Robert Oschler, aquí está mi comentario sobre la pregunta como respuesta:
Puede compilar libcurl reciente (2012) con soporte SSL nativo para Windows utilizando los símbolos del preprocesador: USE_WINDOWS_SSPI y USE_SCHANNEL en lugar de los OpenSSL.
Tal vez esta no es la respuesta que alguien está buscando, simplemente descargué las DLL precompiladas de este enlace que se encuentra en http://curl.haxx.se/download.html
Ejecuté la prueba que proporcionó el sharkin, y if( vinfo->features & CURL_VERSION_SSL )
resultó ser cierta.
Un par de notas en respuesta y / o además de lo anterior ..
Primero, si no quieres jugar con ActivePerl, Strawberry Perl es excelente y funcionó perfectamente para esto.
En segundo lugar, en lugar de usar do_ms .bat, recomendaría preferir do_masm si es posible ya que, según INSTALL.W32,
Esto vale la pena porque dará como resultado un código más rápido: por ejemplo, típicamente dará como resultado una aceleración de 2 veces en las rutinas de RSA.
Además, construir 0.9.8l (L) de OpenSSL fue una pesadilla, así que finalmente me di por vencido y volví a 0.9.8k que se creó y vinculó (estáticamente) con libcurl 1.9 sin problema.
/ fatal error C1083: Cannot open include
file: ''stdlib.h'': No such file or directory
NMAKE: fatal error U1077::return code
Ese error se puede resolver ejecutando vcvarsall.bat en Visual Studio.