Dll sous linux

alexatique Messages postés 5 Date d'inscription mercredi 28 janvier 2009 Statut Membre Dernière intervention 16 mars 2009 - 11 mars 2009 à 16:44
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 12 mars 2009 à 13:46
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 mars 2009 à 17:47
Regarde du côté de "g++ --shared", ça te permet de créer des bibliothèques dynamiques (*.so).
0
alexatique Messages postés 5 Date d'inscription mercredi 28 janvier 2009 Statut Membre Dernière intervention 16 mars 2009
12 mars 2009 à 09:19
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
0
alexatique Messages postés 5 Date d'inscription mercredi 28 janvier 2009 Statut Membre Dernière intervention 16 mars 2009
12 mars 2009 à 09:32
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)
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
12 mars 2009 à 13:46
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.
0
Rejoignez-nous