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 :

[LIBRAIRY] Windows vers linux


Sujet :

Linux

  1. #1
    storm_2000
    Invité(e)
    Par défaut [LIBRAIRY] Windows vers linux
    Ayant une petite expérience du C / C++ je souhaite maintenant faire des applications compatible sur les deux OS que sont " les distributions LINUX " et windows.
    Sous windows j'arrive a créer des librairy statique, des dll et charger celle-ci dynamiquement.
    Maintenant je souhaite à faire la même chose sur les distributions linux mais j'ai déjà un peu de problème.

    j'ai l'entête suivante pour créer une dll mais comment l'adapter pour aussi créer des .so ?
    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
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
    #ifdef PTW32_BUILD
    #define DYNAMIC_LIBRAIRY __declspec (dllexport)
    #else
    #define DYNAMIC_LIBRAIRY __declspec (dllimport)
    #endif
     
    DYNAMIC_LIBRAIRY int toto(int &);
     
    DYNAMIC_LIBRAIRY int tata(int &);
     
    #ifdef __cplusplus
    }
    #endif
    j'avais déjà le début de code suivant :
    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
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
    #ifdef  WIN32 // WINDOWS
    	#ifdef PTW32_BUILD
    	#define DYNAMIC_LIBRAIRY __declspec (dllexport)
    	#else
    	#define DYNAMIC_LIBRAIRY __declspec (dllimport)
    	#endif
    #else // LINUX
    	// Que dois-je faire ?
    #endif
     
    DYNAMIC_LIBRAIRY int toto(int &);
     
    DYNAMIC_LIBRAIRY int tata(int &);
     
    #ifdef __cplusplus
    }
    #endif
    mais maintenant je ne sais pas comment le remplir. Pouvez-vous m'aider ?

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Salut, alors il n'y a pas tant de chose que ca qui change sous linux.

    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
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
    #ifdef  WIN32 // WINDOWS
    	#ifdef PTW32_BUILD
    	#define DYNAMIC_LIBRAIRY __declspec (dllexport)
    	#else
    	#define DYNAMIC_LIBRAIRY __declspec (dllimport)
    	#endif
    #else // LINUX
    	#define DYNAMIC_LIBRAIRY
    #endif
     
    DYNAMIC_LIBRAIRY int toto(int &);
     
    DYNAMIC_LIBRAIRY int tata(int &);
     
    #ifdef __cplusplus
    }
    #endif
    Pour la compilation, pour créer une lib dynamique, il faut rajouter l'option -shared si tu compile avec gcc ou g++

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -W -Wall -shared fichier.c -o nom_du_prog
    Voila, si tu a d'autres questions,
    n'hésites pas.

    Cordialement,
    NeoKript

  3. #3
    storm_2000
    Invité(e)
    Par défaut
    j'ai entendu dire que pour utiliser une bibliothèque sous linux il faut mettre un export dans le fichier .sh (chargement implicite)

    Mais est-il possible de faire un chargement explicite du genre :
    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
     
    #include <windows.h>
    #ifdef WIN32
    #include <iostream>
    #else
    #endif
     
    using std::cout;
    using std::endl;
     
    int main() {
     
    	typedef int(*Type_Pointeur_De_Fonction)(int, int);
    	Type_Pointeur_De_Fonction Pointeur_Fonction;
     
    #ifdef WIN32
    	HINSTANCE DLLHandle;
    	DLLHandle = LoadLibrary("dll.dll");
    	Pointeur_Fonction = (Type_Pointeur_De_Fonction) GetProcAddress(DLLHandle,
    			"addition");
    #else
     
    #endif
     
    	int resultat = 0;
    	resultat = Pointeur_Fonction(3, 7);
    	printf("Le resultat est: %d\n", resultat);
    	cout << "Le résultat est : " << resultat << endl;
     
    #ifdef WIN32
    	FreeLibrary(DLLHandle);
    	system("pause");
    #else
    #endif
     
    	return 0;
    }

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/02/2007, 15h19
  2. partage de connexion depuis windows vers linux
    Par hansaplast dans le forum Windows XP
    Réponses: 4
    Dernier message: 28/10/2006, 21h12
  3. Migration DHCP Windows vers Linux
    Par valal dans le forum Réseau
    Réponses: 3
    Dernier message: 04/05/2006, 10h38
  4. pb CString : Windows vers Linux
    Par ostralo dans le forum C++
    Réponses: 12
    Dernier message: 25/01/2006, 16h51
  5. Réponses: 1
    Dernier message: 01/02/2005, 13h56

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