¿Cómo comstackr el archivo .c con OpenSSL incluye?

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

#include  #include  #include  #include  

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 OpenSSL instalado, estoy tratando de comstackr 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 comstackr es solo un archivo .c, no tiene Makefile o ./configure.

Ya lo intenté:

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

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

¿Qué debo hacer para comstackr con openssl includes?

Sus rutas de inclusión indican que debe comstackr 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]

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 comstackdor en Unix generalmente busca encabezados encerrados entre comillas dobles en el directorio actual automáticamente, pero no lo hace para encabezados encerrados entre corchetes angulares ( #include ). 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 ‘.

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 para vincular con la biblioteca -lcrypto .

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.

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 comstackció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 comstackción.