programa lenguaje ejecutar con compilar compilado compila como archivo c linux compiler-construction openssl compiler-errors

lenguaje - ¿Cómo compilar el archivo.c con OpenSSL incluye?



compilar y ejecutar un programa (7)

Estoy tratando de compilar un pequeño archivo .c que tiene lo siguiente incluye:

#include <openssl/ssl.h> #include <openssl/rsa.h> #include <openssl/x509.h> #include <openssl/evp.h>

En la misma carpeta donde tengo el archivo .c tengo un / openssl con todos esos archivos (y más), también en el administrador de paquetes sinápticos veo que OpenSSL está instalado, estoy intentando compilar con esto:

gcc -o Opentest Opentest.c -lcrypto

pero siempre obtengo los errores:

error: openssl/ssl.h: No such file or directory error: openssl/rsa.h: No such file or directory error: openssl/x509.h: No such file or directory error: openssl/evp.h: No such file or directory

El archivo que quiero compilar es solo un archivo .c, no tiene Makefile o ./configure.

Ya lo intenté:

env CFLAGS=-I/path/to/openssl/

e intenté compilar nuevamente, pero recibo los mismos errores.

¿Qué debo hacer para compilar con openssl includes?


Debe incluir la ruta de la biblioteca (-L / usr / local / lib /)

gcc -o Opentest Opentest.c -L/usr/local/lib/ -lssl -lcrypto

Esto funciona para mi.


Del archivo openssl.pc

prefix=/usr exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: OpenSSL Description: Secure Sockets Layer and cryptography libraries and tools Version: 0.9.8g Requires: Libs: -L${libdir} -lssl -lcrypto Libs.private: -ldl -Wl,-Bsymbolic-functions -lz Cflags: -I${includedir}

Puede observar la ruta del directorio Incluir y la ruta Libs desde aquí. Ahora su prefijo para los archivos de inclusión es /home/username/Programming . Por lo tanto, su opción de archivo de inclusión debe ser -I//home/username/Programming .

(Sí, lo obtuve de los comentarios anteriores)

Esto es solo para eliminar registros con respecto a los encabezados. También puede proporcionar la opción -L<Lib path> para vincular con la biblioteca -lcrypto .


Para este error de gcc, debe hacer referencia al documento gcc sobre la ruta de búsqueda .

En breve:

1) Si usa corchetes angulares (<>) con #include, gcc buscará primero el archivo de encabezado desde la ruta del sistema, como / usr / local / include y / usr / include , etc.

2) Se buscará la ruta especificada por la opción de línea de comando -L dir , antes que los directorios predeterminados.

3) Si usa la comilla ("") con #include como #include "archivo", se buscará primero el directorio que contiene el archivo actual.

Entonces, la respuesta a su pregunta es la siguiente:

1) Si desea utilizar archivos de encabezado en su carpeta de código fuente, reemplace <> con "" en la directiva #include.

2) si desea utilizar la opción de línea de comando I, agréguela a su línea de comandos de compilación. (Si establece CFLAGS en variables de entorno, no se hará referencia automáticamente)

3) Acerca de la configuración del paquete (openssl.pc), no creo que se haga referencia a él sin declararlo explícitamente en la configuración de compilación.


Si los encabezados de OpenSSL están en el subdirectorio openssl del directorio actual, use:

gcc -I. -o Opentest Opentest.c -lcrypto

El preprocesador busca crear un nombre como " ./openssl/ssl.h " desde " . " En la opción -I y el nombre especificado entre corchetes angulares. Si ha especificado los nombres entre comillas dobles ( #include "openssl/ssl.h" ), es posible que nunca haya tenido que hacer la pregunta; el compilador en Unix generalmente busca encabezados encerrados entre comillas dobles en el directorio actual de forma automática, pero no lo hace para los encabezados encerrados entre corchetes angulares ( #include <openssl/ssl.h> ). Es un comportamiento definido por la implementación.

No dice dónde están las bibliotecas de OpenSSL; es posible que necesite agregar una opción y un argumento apropiados para especificar eso, como '' -L /opt/openssl/lib ''.


Sus rutas de inclusión indican que debe compilar contra la instalación de OpenSSL del sistema . No debe tener los archivos .h en el directorio de su paquete; debería estar recogiéndolos de /usr/include/openssl .

El paquete simple de OpenSSL ( libssl ) no incluye los archivos .h ; también debe instalar el paquete de desarrollo. Esto se llama libssl-dev en Debian, Ubuntu y distribuciones similares, y libssl-devel en CentOS, Fedora, Red Hat y similares.


Use la bandera -I para gcc correctamente.

gcc -I/path/to/openssl/ -o Opentest -lcrypto Opentest.c

El -I señalar el directorio que contiene la carpeta openssl .


mi inglés no es muy bueno, pero encontré un parche para este problema en una página web de chinesse

yum install openssl yum install openssl-devel

instalar esto y eso es, probado en centos 5.4 y keepalived-1.2.7]