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

Linux Discussion :

Comment utiliser une librarie .so (sous linux)


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 25
    Par défaut Comment utiliser une librarie .so (sous linux)
    Bonjour,
    J'ai un example d'application C sous windows qui utilise une librarie (DLL).
    Avec cette librairie j'ai également reçu un fichier .so et je voudrais tester cette librarie sous Linux.
    En gros je voudrais faire la même application que celle que j'ai recu pour windows.
    Malheureusement je ne sais pas comment faire pour charger une librairie dans mon code C sous linux.
    Ce-dessous vous pouvez voir quelque lignes de codes extraites de l'application C sous windows:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    //create instance
    public HINSTANCE    myHI;
     
    //definition of callback
    typedef INT (CALLBACK* LPFNDLLflxSetConfiguration)(int func, int comtype, char *comnr, int comport );
     
    //load lib
    myHI = LoadLibrary("flxdrv.dll");
    .
    .
    //register to get callback fron library
    flxSetConfiguration = (LPFNDLLflxSetConfiguration) GetProcAddress(myHI,"_flxSetConfigurationVB@16");
    .
    .
    .
    J'ai essayé d'utiliser ce code sous Linux mais il n'y a pas moyen de compiler.
    Pouvez-vous me dire où commencer/quoi changer?
    Y a t'il des tutorials où je pourrai trouver plus d'infos sur la manière d'utiliser des libraries C sous Linux et spécialement avec des explications sur les callback?

    Merci d'avance pour votre aide.

    Alain.

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    L'API n'est pas la même sous linux.

    Il faut que tu regardes du côté de dlopen et cie http://man.developpez.com/man3/dlopen.3.php

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    sous unixoide tu ne la charges pas...

    Elle est dynamique..

    Tu dois (par défaut, bien qu'on puisse faire autrement) la placer dans /usr/lib
    et uniquement include les ".h", et au moment de la compile indiquer par les flags de compilations où elle se trouve.

    Si par défaut elle n'est pas dans /usr/lib, il te faut rajouter :

    ça c'était le principe..

    et comme dit Hegros en plus ça compilera pas c'est pas la même API..

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Notre ami hiko-seijuro a fait un tutoriel là-dessus :
    http://hiko-seijuro.developpez.com/a...que-dynamique/

    Certes c'est pour l'exportation de classes C++ (hmmm, c'est quoi le C++ ? ) mais le princpe reste le même pour ce qui est de l'exportation.

    Jc

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par souviron34
    sous unixoide tu ne la charges pas...
    Si, avec dlopen().

    LoadLibrary() <==> dlopen()
    GetProcAddress() <==> dlsym()

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par David.Schris
    Si, avec dlopen().

    LoadLibrary() <==> dlopen()
    GetProcAddress() <==> dlsym()
    connais pas.....

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par souviron34
    connais pas.....
    Solaris (ou SunOS) et Linux (inspiré de Solaris sur ce point) entre autres. Peut-être pas tous unixoïdes mais
    Citation Envoyé par [url=http://www.die.net/doc/linux/man/man3/dlopen.3.html]man dlopen[/url]
    HISTORY
    The dlopen interface standard comes from SunOS. That system also has dladdr(), but not dlvsym().
    CONFORMING TO
    POSIX.1-2001 describes dlclose(), dlerror(), dlopen(), and dlsym().
    Peut servir, par exemple, pour créer un système de plugins...

  8. #8
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 25
    Par défaut
    Merci beaucoup pour toutes vos réponses.
    J'ai lu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    LoadLibrary() <==> dlopen()
    GetProcAddress() <==> dlsym()
    Mais je n'arrive toujours pas à utiliser dlsym
    Auriez-vous une idée de comment je dois utiliser la commande dlsym pour faire la même chose que la commande utilisée sous windows(ci dessous)?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    flxSetConfiguration = (LPFNDLLflxSetConfiguration) GetProcAddress(myHI,"_flxSetConfigurationVB@16");
    Je n'arrive pas à trouver la bonne syntaxe

    Merci d'avance.

    Alain.

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par David.Schris
    Solaris (ou SunOS) et Linux (inspiré de Solaris sur ce point) entre autres. Peut-être pas tous unixoïdes mais

    Peut servir, par exemple, pour créer un système de plugins...
    ok...

    Mais la question de départ étant sur les .so, normalement en C sous unixoide la manière standard de procéder me semble celle que j'ai décrite ( à moins que je sois un vieux crouton.... ).

    La seule différence de principe entre une librairie statique et une librairie dynamque est que le code n'est pas recopié dans le binaire, mais juste les adresses des routines appelées (d'où d'ailleurs l'inconvénient majeur qu'il faut que la bibliothèque soit au même endroit dans le système).

    Me trompe-je ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/02/2009, 07h11
  2. comment utiliser une library C avec g++
    Par pichouss dans le forum C++
    Réponses: 4
    Dernier message: 22/05/2008, 18h08
  3. Peut-on utiliser une appllication .Net sous Linux ?
    Par goof_22 dans le forum Framework .NET
    Réponses: 8
    Dernier message: 18/10/2006, 11h08
  4. Comment faire une recherche/remplacement sous Linux
    Par fabszn dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 07/02/2006, 16h38
  5. installer une librarie c++ sous linux
    Par youp_db dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 22/01/2006, 23h31

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