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

Langage C++ Discussion :

faire appel à une fonction qui existe dans un .so


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 71
    Par défaut faire appel à une fonction qui existe dans un .so
    Salut,
    j'ai une librairie .so et j'essaye de faire un appel à une fonction qui existe dans ce .so.
    voilà mon code ;
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
      cout << "Opening hello.so...\n";
    	    void* handle = dlopen("./lib.so", RTLD_LAZY);
     
    	    if (!handle) {
    	        cerr << "Cannot open library: " << dlerror() << '\n';
    	        return 1;
    	    }
     
     
    	    // load the symbol
    	    cout << "Loading symbol Data...\n";
    	    char const *nativeString ="/root/Desktop/dll/testLib";
    	    int const  v1=1,v2=1,v3=1,v4=1,v5=1,v6=1,v7=1,v8=1;
    	    float const  v9=1;
    	    typedef int(*function_t)(char const *,int const,int const,int const,int const,int const,int const,int const,int const,float const &);
    	    function_t*   fonc = (function_t*)dlsym(handle, "myFunction");
     
    	        // reset errors
    	        const char *dlsym_error = dlerror();
    	        if (dlsym_error) {
    	            cerr << "Cannot load symbol 'Data': " << dlsym_error <<
    	                '\n';
    	            dlclose(handle);
    	            return 1;
    	        }
     
    	        cout << "Calling myFunction...\n";
    	        fonc(nativeString,v1,v2,v3,v4,v5,v6,v7,v8,v9);
     
    	        // close the library
    	        cout << "Closing library...\n";
    	        dlclose(handle);
    l'erreur qui m'affiche c'est: " ‘fonc’ cannot be used as a function "
    et voilà mon fonction dans le fichier .h (qui existe dans le .so):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
    int processData(char const * var1, int const var2,	int const var3, int const var4,int const var5, int const var6,int const var7, int const var8,int const var9,float const & var10);
     
    #ifdef __cplusplus
    }
    #endif
    franchement j'ai essayé plusieurs syntaxe mais g pas réussi à trouver le bon, en fait moi je travaille avec JAVA mais g besoin d'utiliser une librairie .so developpée en c++ dans mon code.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Ton pointeur sur fonction ne devrait-il pas être déréférencé, comme dans:

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 71
    Par défaut
    je pense pas car si j'utilise *fonc(...), il m'affiche le même erreur " ‘fonc’ cannot be used as a function "
    et si j'utilise (*fonc)(...) il m'affiche les erreurs suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ./src/appelSo.o: In function `main':
    /root/Desktop/logiciels/eclipse/workspace/appelSo/Debug/../src/appelSo.cpp:20: undefined reference to `dlopen'
    /root/Desktop/logiciels/eclipse/workspace/appelSo/Debug/../src/appelSo.cpp:23: undefined reference to `dlerror'
    /root/Desktop/logiciels/eclipse/workspace/appelSo/Debug/../src/appelSo.cpp:34: undefined reference to `dlsym'
    /root/Desktop/logiciels/eclipse/workspace/appelSo/Debug/../src/appelSo.cpp:37: undefined reference to `dlerror'
    /root/Desktop/logiciels/eclipse/workspace/appelSo/Debug/../src/appelSo.cpp:41: undefined reference to `dlclose'
    /root/Desktop/logiciels/eclipse/workspace/appelSo/Debug/../src/appelSo.cpp:50: undefined reference to `dlclose'
    collect2: ld a retourné 1 code d'état d'exécution
    make: *** [appelSo] Erreur 1
     
    **** Build Finished ****

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Tu utilises quoi comme commande pour compiler? Et pour linker? Tu as des problèmes de link, le linker ne trouve pas les so.

  5. #5
    screetch
    Invité(e)
    Par défaut
    link avec "dl" (-ldl sur la ligne de commande)
    aussi, je te conseille de pas compiler en root, m'enfin bon chacun fait comme il veut hein

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 71
    Par défaut
    j'utilise eclipse c/c++ sous centos(linux) pour compiler et non pas une ligne de commande
    mais g placé le .so dans le même dossier de mon fichier.cpp donc normalement il le voit en tappant './lib.so' ??

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/07/2009, 22h44
  2. Réponses: 1
    Dernier message: 02/05/2008, 20h34
  3. Réponses: 2
    Dernier message: 06/03/2008, 21h20
  4. Réponses: 4
    Dernier message: 08/08/2007, 17h36
  5. appel d'une fonction qui est dans une autre page
    Par guppy33 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/08/2006, 12h05

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