¿Referencia indefinida a RSA_generate_key en OpenSSL? [duplicar

Esta pregunta ya tiene una respuesta aquí:

Enlazando libssl y libcrypto en GCC [duplicado] 2 respuestas

Tengo el siguiente código en el archivorsatest.c. Estoy tratando de generar un par de claves RSA.

#include <openssl/rsa.h>
#include <openssl/pem.h>

int main(){
    RSA *rsa = RSA_generate_key((const int) 1024,(const int) 3, 0, 0);
    return 0;
}

Estoy compilando esto con

gcc -I../include/ -L . -lcrypto -lssl rsatest.c

y obtengo el siguiente error.

 undefined reference to `RSA_generate_key'

¿Estoy vinculando los archivos de la biblioteca en el orden incorrecto? Hice libcrypto.a y libssl.a en Windows (64 bits), con msys y mingw, y estoy ejecutando el código en el mismo sistema.

RSA_generate_key ha sido declarado en rsa.h. ¿No está definido en libcrypto.a?

EDIT:

Intenté esto también,

gcc -I../include rsatest.c -L . -lcrypto -lssl

y entiendo que el enlazador buscará definiciones en las bibliotecas que van de izquierda a derecha.

Sin embargo, obtengo nuevas referencias indefinidas a varias funciones en

rand_win.o and c_zlib.o

Busqué en línea y encontré los símbolos que faltan en las bibliotecas gdi32 y zlib. Entonces agregué

-lz and -lgdi32

El compilador no se quejó de la falta de una biblioteca, por lo que supongo que están presentes con mingw. Y aún así, obtengo el mismo resultado.

También utilicé nm, y descubrí que los símbolos no estaban definidos en rand_win.o y c_zlib.o.

¿Por qué el enlazador parece no encontrar definiciones en estas bibliotecas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta