Ne pouvez pas lier OpenSSL code

Je suis en train de construire une openssl programme simple. Voici le code complet:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "openssl/aes.h"

int main(int argc, char* argv[])
{
    AES_KEY aesKey_;
    unsigned char userKey_[16];
    unsigned char in_[16];
    unsigned char out_[16];
    strcpy(userKey_,"0123456789123456");
    strcpy(in_,"0123456789123456");

    fprintf(stdout,"Original message: %s", in_);
    AES_set_encrypt_key(userKey_, 128, &aesKey_);
    AES_encrypt(in_, out_, &aesKey_);

    AES_set_decrypt_key(userKey_, 128, &aesKey_);
    AES_decrypt(out_, in_,&aesKey_);
    fprintf(stdout,"Recovered Original message: %s", in_);      
    return 0;
}

J'essaie de le compiler à l'aide de cette commande:

gcc -I/home/aleksei/openSSL0.9.8/include -o app -L . -lssl -lcrypto tema1.c

et j'obtiens ceci:

 /tmp/ccT1XMid.o: In function `main':
 tema1.c:(.text+0x8d): undefined reference to `AES_set_encrypt_key'
 tema1.c:(.text+0xa7): undefined reference to `AES_encrypt'
 tema1.c:(.text+0xbf): undefined reference to `AES_set_decrypt_key'
 tema1.c:(.text+0xd9): undefined reference to `AES_decrypt'
 collect2: ld returned 1 exit status

Je suis sous Ubuntu 10.04. Comment puis-je obtenir que cela fonctionne ?

L'erreur est vous dire que le linker ne peut trouver la définition de ces fonctions. Même si vous la liste des bibliothèques, vous spécifiez l'actuelle bibliothèque pour la bibliothèque des chemins, ce qui pourrait être le problème. Avez-vous des libssl.so et libcrypto.so dans le répertoire courant?
Oui je les ai dans le répertoire courant.
Même avec cette commande gcc -I/home/aleksei/openSSL0.9.8/include -o app-L /home/aleksei/openSSL0.9.8/lib/ -lssl -lcrypto tema1.c il me donne toujours le même résultat. Comment puis-je faire de l'éditeur de liens trouver les définitions de ces fonctions?
Si j'écris un endroit qui n'existe pas à regarder pour les libs, il me donne ceci: /usr/bin/ld: ne peut trouver -lssl . Donc, cela signifie que l'éditeur de liens les trouve, mais quoi?
Dump les symboles dans la bibliothèque. nm libcrypto.so | grep AES_. Effectuez l'une des symboles manquants venir? Si non (ou leur lettre U au lieu de T), alors les symboles ne sont pas vraiment dans le libcrypto de la bibliothèque. Ils sont dans ma copie de 0.9.8 r que j'ai compilé avec la config par défaut, mais je présume que c'est une OpenSSL que vous avez construit vous-même, oui?

OriginalL'auteur AlexandruC | 2012-06-12