Como compilar um programa simples com o OpenSSL?

estou a tentar compilar um programa ssl simples (foi retirado do código fonte do livro openssl). O programa tem os seguintes arquivos: comum.h comum.cliente C.servidor C.C

instalei o openssl 0.9.7 por isso tenho a mesma versão do livro. Baixei a fonte e .../ Configure, make, make test, make install na pasta pessoal.

No comum.h o seguinte inclui:

#include <openssl/bio.h>
#include <openssl/err.h>
#include <openssl/rand.h>
#include <openssl/ssl.h>
#include <openssl/x509v3.h> 

Eu corro GCC-parede comum.cliente C.cliente de C-O mas eu tenho os seguintes erros:

common.c: In function ‘init_OpenSSL’:
common.c:12:5: warning: implicit declaration of function ‘THREAD_setup’
/tmp/ccvI3HX4.o: In function `handle_error':
common.c:(.text+0x3a): undefined reference to `ERR_print_errors_fp'
/tmp/ccvI3HX4.o: In function `init_OpenSSL':
common.c:(.text+0x51): undefined reference to `THREAD_setup'
common.c:(.text+0x5a): undefined reference to `SSL_library_init'
common.c:(.text+0x97): undefined reference to `SSL_load_error_strings'
/tmp/ccRA0Co9.o: In function `do_client_loop':
client.c:(.text+0x71): undefined reference to `BIO_write'
/tmp/ccRA0Co9.o: In function `main':
client.c:(.text+0xbb): undefined reference to `BIO_new_connect'
client.c:(.text+0x106): undefined reference to `BIO_ctrl'
client.c:(.text+0x18e): undefined reference to `BIO_free'
collect2: ld returned 1 exit status

obviamente não pode ligar-se aos ficheiros de cabeçalho... Quando eu executar como sugerido em um fórum GCC-Wall common.cliente C.C-O client-lcrypto-lssl I get

common.c: In function ‘init_OpenSSL’:
common.c:12:5: warning: implicit declaration of function ‘THREAD_setup’
/tmp/cc2gjx8W.o: In function `init_OpenSSL':
common.c:(.text+0x51): undefined reference to `THREAD_setup'
collect2: ld returned 1 exit status

mas adicionar-lpthread não vai ajudar a resolver o problema...

Alguma ideia do porquê disto acontecer e como resolvê-lo?

o meu palpite é que o lcrypto e o lssl estão instalados por omissão no ubuntu e ao fazer-o lcypto está a dizer ao linker para ver os cabeçalhos dos sistemas e não os de instalação openssl...

qualquer ajuda ou ponteiros é apreciado!

Obrigado!

Author: jww, 2011-06-10

1 answers

Em algumas versões de código do livro openssl, as funções relacionadas com o tópico são armazenadas no reentrant.c, (na verdade a declaração do TRHEAD_setup, na versão que eu vi está lá), então tente com:

gcc -Wall common.c client.c reentrant.c -o client -lcrypto -lssl
 4
Author: Jon Ander Ortiz Durántez, 2011-06-10 11:17:42