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 :

library dynamic c++


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    25
    D�tails du profil
    Informations personnelles :
    Localisation : France, Finist�re (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 25
    Par d�faut library dynamic c++
    Bonjour � tous, je fais face � un probl�me depuis plusieurs heures d�j� ...
    En effet, je tente en vain de charger une m�thode � l'aide des fonction dlopen() et dlsym(). Le chargement de la biblioth�que se passe correctement mais la m�thode n'est pas trouv�e ! Pour tester le le concept, j'ai r�cup�rer des exemples simple du net dans les tuto comme l'exemple qui suit:

    J'ai une library:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include<iostream>
     
    using std::cout;
    using std::endl;
     
    int entry()
    {
        cout<<"I am module one!\n"<<endl;
        return 0;
    }
    Voici mon code appelant:

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    #include <iostream>
    #include <dlfcn.h>
    #include <errno.h>
     
     
     
    using std::cout;
    using std::cerr;
    using std::endl;
     
    int main(void)
    {
    	void * module;
    	char* msg;
     
    	/* chargez le module, et résolvez les symboles maintenant */
    	module = dlopen("module1.so", RTLD_LAZY);
    	if(!module)
    	{
    		cerr<<dlerror()<<endl;
    		dlclose(module);
    		exit(1);
    	}
    	cerr<<"the end"<<endl;
    	/* recherchez l'adresse du point d'entrée */
    	void* my_entry = dlsym(module, "entry");
     
    	msg = dlerror();
    	if(msg != NULL) {
    		perror(msg);
    		dlclose(module);
    		exit(1);
    	}
     
    	/* appelez le point d'entrée du module */
    //	int i=reinterpret_cast<int*()>(my_entry)();
     
     
    	//my_entry();
     
    	/* fermez le module */
    /*	if(dlclose(module)) {
    		perror("error");
    		exit(1);
    	}
     
    	return 0;*/
     
    }
    et enfin le Makefile (tr�s simple):

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CXX=g++
     
    all:
    	$(CXX) -o loader main.cpp -ldl
    	$(CXX) -fPIC -c module1.cpp
    	$(CXX) -shared -o module1.so module1.o
    	$(CXX) -fPIC -c module2.cpp
    	$(CXX) -shared -o module2.so module2.o
     
    clean:
    	rm -rf *.so
    	rm -rf *.o
    	rm -rf loader
    Voil� pour le code...
    La suite du main fait r�f�rence � un second probl�me qui m'attend qui est celui du cast du pointeur de fonction. J'ai en effet essay� plusieurs combinaisons en par le static_cast ou bien le typedef tir�s d'exemple du net mais aboutissant sans exception � une erreur de compilation
    (je suis sur linux, version de gcc 4.1.2)
    Merci pour votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    25
    D�tails du profil
    Informations personnelles :
    Localisation : France, Finist�re (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 25
    Par d�faut
    Petite correction du code qui a son importance:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include<iostream>
     
    using std::cout;
    using std::endl;
     
    extern "C"
    {
    	int entry()
    	{
    	    cout<<"I am module one!\n"<<endl;
    	    return 0;
    	}
    }
    Voil�, j'avais oubli� le extern "C" � force de bidouille .
    N�anmoins, la question reste en suspend concernant le cast de ce fameux pointeur de fonction...

  3. #3
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    T'�tais pas loin
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int i=reinterpret_cast<int(*)()>(my_entry)();

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    25
    D�tails du profil
    Informations personnelles :
    Localisation : France, Finist�re (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 25
    Par d�faut
    Un grand merci � toi Laurent pour cette r�ponse rapide et surtout juste !!!

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Oracle] Unable to load dynamic library php_oci8.dll
    Par Dark Ryus dans le forum PHP & Base de donn�es
    R�ponses: 1
    Dernier message: 08/04/2008, 16h38
  2. Unable to load dynamic library php_oci8.dll
    Par rochenico dans le forum EDI, CMS, Outils, Scripts et API
    R�ponses: 5
    Dernier message: 08/01/2008, 11h26
  3. IIS - "unable to load dynamic library"
    Par nicojet dans le forum IIS
    R�ponses: 1
    Dernier message: 27/06/2007, 09h44
  4. [visual studio 6] De Static Library � Dynamic Library
    Par mambo dans le forum Visual C++
    R�ponses: 2
    Dernier message: 30/05/2007, 15h33
  5. php_ifx.dll : unable to load dynamic library
    Par fh dans le forum EDI, CMS, Outils, Scripts et API
    R�ponses: 2
    Dernier message: 08/12/2005, 11h31

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