Error de compilación de Openssl

He incluido los siguientes archivos de encabezado en un código C usando bibliotecas openssl.

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <time.h>
#ifdef __VMS
#include <in.h>
#include <inet.h>
#else
#include <netinet/in.h>
#include <arpa/inet.h>
#endif
#include <openssl/crypto.h>
#include <openssl/ssl.h>
#include <openssl/err.h>

Luego compilé el programa usando gcc -o openssl -lssl -lcrypt openssl.c En mi oficina, este código se compiló y funcionó bien, pero en el sistema de mi casa (ambos son linux-debian 6 en la oficina y Ubuntu 12.04 en casa), dio el siguiente error:

/tmp/ccZcmLk4.o: In function `main':
server.c:(.text+0x3d): undefined reference to `SSL_library_init'
server.c:(.text+0x42): undefined reference to `SSL_load_error_strings'
server.c:(.text+0x47): undefined reference to `SSLv3_method'
server.c:(.text+0x57): undefined reference to `SSL_CTX_new'
server.c:(.text+0x6f): undefined reference to `ERR_print_errors_fp'
server.c:(.text+0x97): undefined reference to `SSL_CTX_use_certificate_file'
server.c:(.text+0xa8): undefined reference to `ERR_print_errors_fp'
server.c:(.text+0xd0): undefined reference to `SSL_CTX_use_PrivateKey_file'
server.c:(.text+0xe1): undefined reference to `ERR_print_errors_fp'
server.c:(.text+0xf9): undefined reference to `SSL_CTX_check_private_key'
server.c:(.text+0x154): undefined reference to `SSL_CTX_load_verify_locations'
server.c:(.text+0x165): undefined reference to `ERR_print_errors_fp'
server.c:(.text+0x18d): undefined reference to `SSL_CTX_set_verify'
server.c:(.text+0x1a1): undefined reference to `SSL_CTX_set_verify_depth'
server.c:(.text+0x397): undefined reference to `SSL_new'
server.c:(.text+0x3c2): undefined reference to `SSL_set_fd'
server.c:(.text+0x3ce): undefined reference to `SSL_accept'
server.c:(.text+0x3e6): undefined reference to `ERR_print_errors_fp'
server.c:(.text+0x3fe): undefined reference to `SSL_get_current_cipher'
server.c:(.text+0x406): undefined reference to `SSL_CIPHER_get_name'
server.c:(.text+0x42e): undefined reference to `SSL_get_peer_certificate'
server.c:(.text+0x455): undefined reference to `X509_get_subject_name'
server.c:(.text+0x46d): undefined reference to `X509_NAME_oneline'
server.c:(.text+0x4b1): undefined reference to `X509_get_issuer_name'
server.c:(.text+0x4c9): undefined reference to `X509_NAME_oneline'
server.c:(.text+0x50d): undefined reference to `X509_free'
server.c:(.text+0x593): undefined reference to `SSL_write'
server.c:(.text+0x5ab): undefined reference to `ERR_print_errors_fp'
server.c:(.text+0x5d3): undefined reference to `SSL_read'
server.c:(.text+0x5eb): undefined reference to `ERR_print_errors_fp'
collect2: ld returned 1 exit status

Entiendo que esto se debe a la ausencia de ciertas bibliotecas en la PC de mi casa. Pero, ¿alguien puede decirme qué bibliotecas necesito instalar para esto? Gracias por adelantado.

preguntado el 12 de junio de 12 a las 11:06

2 Respuestas

Coloque las bibliotecas después del archivo fuente:

gcc -o openssl openssl.c -lssl -lcrypto

Ver: http://www.network-theory.co.uk/docs/gccintro/gccintro_18.html

Respondido el 15 de Septiembre de 19 a las 06:09

Bueno, eso funcionó. Pero devolvió una advertencia que no recibí en la oficina. server.c: In function ‘main’: server.c:55:7: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default] Me temo que tendré que pegar todo el código para mostrarte dónde está el problema. Pero ciertamente no fue en la oficina. - Harikrishnan

@Hari Estás usando diferentes versiones del compilador, ¿sí? Ajuste las banderas durante la compilación para armonizar las advertencias o acostúmbrese a los diferentes resultados del compilador. Preferiblemente, debe usar la misma versión del compilador en ambas ubicaciones. - Honky Tonk

Tenía que hacer -lssl -lcrypto (nota la 'o'!) para evitar un misterioso undefined reference to symbol PEM_read_bio_DHparams - Orión Lawlor

poner el nombre del archivo antes de la opción -l

Respondido 08 Abr '13, 03:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.