Dll sous linux

Signaler
Messages postés
5
Date d'inscription
mercredi 28 janvier 2009
Statut
Membre
Dernière intervention
16 mars 2009
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Bonjour,
Voila mon probleme, je dois developper une dll sous visual studio, faire un programme qui appelle cette dll. Ceci je l'ai validé.Mais maintenant je dois developper une dll sous Linux et ensuite tester si cette dll marche avec mon programme c++.En esperant que j'ai été assez comprehensible. Merçi d'avance.

4 réponses

Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Regarde du côté de "g++ --shared", ça te permet de créer des bibliothèques dynamiques (*.so).
Messages postés
5
Date d'inscription
mercredi 28 janvier 2009
Statut
Membre
Dernière intervention
16 mars 2009

Merci de ta réponse mais c'est pas ca le probleme.Enfin dans mon programme de test j'appelle une fonction ecrire.


Programme de test.cpp




#include








"stdafx.h"



#include








<windows.h>



#include












using








namespace

std;



typedef








void

(*PF) (


char

*);



int




main(


int

argc,


char

* argv[]){

HMODULE hm = 0;

hm = LoadLibraryA(



"test_Linux"

);PF ecrire = (PF)GetProcAddress(hm,



"ecrire"

); ecrire(



"Coucou"

); FreeLibrary(hm);



return

0;
}

Donc il faut que je crée une dll sous linux qui a une fonction ecrire...
En fait lorsque que je compile sa me met des erreurs dans mon programme
Messages postés
5
Date d'inscription
mercredi 28 janvier 2009
Statut
Membre
Dernière intervention
16 mars 2009

Et voici la dll que je faire fonctionner sous Linux:

#include <stdio.h>

#include "DLL.h"

dllimport void ecrire (char* texte)
    {
  

    cout << texte;

    cout.flush();
  }

Et voici DLL.h

#include <stdio.h>

 
//#ifdef DLL_EXPORTS

//#define DLL __declspec(dllexport)

//#else

//#define DLL __declspec(dllimport)

//#endif

 
//dllimport int ecrire (char* texte)
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,

Argh !

LoadLibraryA
GetProcAddress
FreeLibrary

Ce sont des fonctions windows. Pour Linux, il faut utiliser dlopen et ses collègues. Dans le cas d'un chargement dynamique d'une librairie dynamique. Mais tu peux aussi utiliser dllimport pour te lier statiquement à la librairie dynamique...

Tant que j'y suis, DLL.h semble conçu pour être inclus dans l'exe et la dll, avec le ifdef pour le declspec. Mais dllimport fait tâche.
<hr size="2" width="100%" />#include <stdio.h>
 
#ifdef DLL_EXPORTS
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif
 
DLL_EXPORTS int ecrire (char* texte)<hr size="2" width="100%" />
Jamais vu quelqu'un utiliser stdafx sous Linux. C'est un fichier généré par VC en général, donc a oublier.

En général, une dll exporte des fonction C, pas C++. M'enfin pour un exemple...

Plus d'explications ici.