IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

DLSYM/DLOPEN - problème lors de la création du fichier .so - non prise en compte des #include


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut DLSYM/DLOPEN - problème lors de la création du fichier .so - non prise en compte des #include
    Bonjour,

    Je cherche à comparer plusieurs implémentations d'une même fonction int keypair(unsigned char *, unsigned char *).
    L'idée est donc pour chaque implémentation de la compiler dans une bibliothèque, puis de faire un programme qui
    - charge une bibliothèque;
    - chronomètre l'éxécution de la fonction
    - ferme la bibliothèque;
    - charge une nouvelle bibliothèque.

    Pour commencer, j'essaie de créer une première bibliothèque contenant la première implémentation de la fonction keypair.

    J'effectue les actions suivantes avec un bash dans le répertoire contenant la première implémentation étudiée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    gcc -fPIC -c *.c
    gcc -shared -Wl,-soname,kem.so.1 -o kem.so.1.0 *.o
    ln -s kem.so.1.0 kem.so.1
    ln -s kem.so.1 kem.so
    export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
    (j'ai trouvé l'inspiration ici http://www.linux-france.org/article/memo/node113.html)

    Je cherche ensuite à intégrer à la volée une bibliothèque dans un programme.

    Le code pour charger la bibliothèque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int main()
    {
            int (*keypair) (unsigned char *, unsigned char *);
            void * dlobj;
            unsigned char pk[PUBLICKEYBYTES], sk[SECRETKEYBYTES];
     
            void * dlobj = dlopen("le path/kem.so.1.0", RTLD_LAZY);
            keypair = dlsym(dlobj,"keypair");
            keypair(pk, sk);
     
            return 0;
    }
    Je compile le programme ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -ldl -o test test.c
    J'ai alors l'erreur suivante :
    ./test: symbol lookup error: PATH/kem.so.1.0: undefined symbol: EVP_CIPHER_CTX_new

    Mon problème, c'est que EVP_CIPHER_CTX_new est une fonction d'openssl appelée par keypair.
    Comme j'ai déjà un #include <openssl/evp.h> dans les fichiers .c compilés lors de la création de kem.so, cette erreur me surprend un peu.

    Elle me montre que les #include n'ont pas été respectés lors de la création de ma bibliothèque.
    Je suppose donc que l'erreur est dans le code bash au début, mais je n'arrive pas à la trouver. L'autre possibilité est que l'erreur vienne de la fonction keypair, mais la probabilité est moindre.

    Une petite précision, comme il s'agit d'une bibliothèque, il n'y a pas de main parmi les fonctions compilées.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Le problème portait sur l'importation des bibliothèques crypto.

    La correction, simple, était donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    gcc -fPIC -c *.c
    gcc -lssl -lcrypto -shared -Wl,-soname,kem.so.1 -o kem.so.1.0 *.o
    ln -s kem.so.1.0 kem.so.1
    ln -s kem.so.1 kem.so
    export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/03/2010, 13h14
  2. Réponses: 11
    Dernier message: 05/08/2009, 12h30
  3. Réponses: 3
    Dernier message: 26/02/2006, 23h53
  4. Réponses: 2
    Dernier message: 21/11/2005, 09h29
  5. Clé étrangère problème lors de la création de la table.
    Par snoopy69 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 18/08/2005, 08h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo