2012-06-12 13 views
5

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

#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> 

Entonces el programa compilado usando gcc -o openssl -lssl -lcrypt openssl.c En mi oficina este código compila y ejecuta bien, pero en mi sistema de casa (ambos son debian linux-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 falta de ciertas bibliotecas en la PC de mi casa. ¿Pero alguien puede decirme qué bibliotecas necesito instalar para esto? Gracias por adelantado.

Respuesta

17

poner la biblioteca después de que el archivo de origen:

gcc -o openssl openssl.c -lssl -lcrypt 

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

+0

Bueno, que funcionó. Pero me devolvió una advertencia que no recibí en la oficina. 'server.c: En la función 'main': server.c: 55: 7: advertencia: la asignación descarta el calificador 'const' del tipo de destino del puntero [habilitado por defecto]' Me temo que tendré que pegar todo el código para mostrarte dónde está el problema Pero ciertamente no fue en la oficina. –

+0

@Hari Está utilizando versiones de compilador diferentes, ¿sí? Ajuste los indicadores durante la compilación para armonizar las advertencias o acostumbrarse a diferentes salidas del compilador. Preferiblemente, debería usar la misma versión del compilador en ambas ubicaciones. – HonkyTonk

+3

Tenía que hacer '-lssl -lcrypto' (observe la 'o'!) Para evitar una misteriosa' referencia indefinida al símbolo PEM_read_bio_DHparams' –

1

poner el nombre de archivo antes opción -l