2009-12-12 33 views
20

Estoy tratando de usar openssl en un programa gcc pero no está funcionando.¿Cómo usar OpenSSL en GCC?

g++ server.cpp /usr/lib/libssl.a -o server 

da un mensaje de error, como lo hace cualquier cosa con la opción -l. ¿Qué debo escribir en la línea de comando para vincular con openssl? El archivo /usr/lib/libssl.a existe, pero aún así recibo el error del enlazador no such function MD5() exists.

+1

No veo el uso de -l en el comando que publicaste. Y no publique su pregunta en MAYÚSCULAS: gritar es grosero. –

+2

Algo como 'g ++ server.cpp -L/usr/lib -lssl -o servidor' debería ser el truco. Publique los errores exactos que está recibiendo y alguien puede ayudarlo. Y segundo a Neil sobre lo que grita;) –

+0

Te falta '/ usr/lib/libcrypto.a'. 'libcrypto' proporciona la criptografía utilizada por' libssl'. Agregue ambos en este orden exacto porque LD es un único usuario de paso: '/usr/lib/libssl.a/usr/lib/libcrypto.a'. – jww

Respuesta

22

Sin saber los errores exactos que está viendo, es difícil proporcionar una solución exacta. Este es mi mejor intento.

Según la información que proporcionó, parece que el enlazador está fallando porque no puede encontrar una referencia a la función md5 en libssl.a. Creo que esta función está realmente en libcrypto, por lo que es posible que también deba especificar esta biblioteca.

g++ server.cpp -L/usr/lib -lssl -lcrypto -o server

5

En Eclipse IDE seleccione su propiedad Proyecto -> C/C++ Build -> Configuración enlazador gcc c (a partir de la configuración de Herramientas) -> Añadir a la biblioteca Ruta de búsqueda (L)

/usr/lib -lssl -lcrypto

0

en la parte superior de las respuestas aceptadas, no podía hacer compilar el ejemplo OpenSSL para AES-CCM:

https://github.com/openssl/openssl/blob/master/demos/evp/aesccm.c

para que funcione lo que necesitaba para agregar dos cosas más:

  • El Dinamic Vinculación Biblioteca: -ldl
  • La biblioteca PThread a utilizar soporte para hilos POSIX: -pthread (que aumentan directamente la biblioteca con -lpthread es not recommended)