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

Autres éditeurs Discussion :

Creer et utiliser une librairie externe à l'exécutable


Sujet :

Autres éditeurs

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 15
    Points : 13
    Points
    13
    Par défaut Creer et utiliser une librairie externe à l'exécutable
    Salut !


    Je développe un jeu actuellement, en C++, et j'aimerais mettre les diférentes parties de mon projet dans des fichiers externes à l'exécutable, pour pouvoir facilement les remplacé si besoin.

    Mes questions sont :
    - Quels sont les avantages de mettres mes librairies en dehors de l'exécutable ? En fait je me pose cette question pour savoir si c'est vraiment utile ...
    - Comment faut-il que je fasse dans le cas où je veuille m'en servir (d'une part du coté de la librairie, et de l'autre, dans le programme principal pour l'utiliser) ?


    Pour info, si jamais c'est utile, je développe sous Visual C++ 6.0, sous Windows donc, mais j'aimerais bien que mon projet puisse être utilisé sous Linux (j'utilise SDL, encapsulée, comme librairie multimédia ...)


    Merci

  2. #2
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Un gros avantage de la lib c'est de pouvoir être utilisé pour d'autre projects sans avoir à inclure wattmille fichiers et reconfigurer a chaque fois l'environment de compilation de VC++ !

    Cela s'utilise comme une autre lib, donc il faut un .h qui inclu tous les .h de ta lib et que tu inclueras dans ton programme.


    Si c'est pour un projet il y a pas beaucoup d'avantage, surtout si ton projet est pas trop gros !

    Si par contre tu as écrit une lib puissante qui à une architecture défini ou tu risques de changer le contenu des fonctions et non les entêtes de fonctions, cela peut devenir TRES intéressant, car il suffit juste de remplacer la DLL et ton programme tourneras + vite ou avec moins de bug, donc updaté.

    Si par contre tu sents que tu tatonnes dans l'écritures de toutes tes fonctions, que l'architecture d'une lib entière peut paraitre difficile, tu peux toujours essayer de partitionner en +sieurs morceaux ta lib, donc avoir +sieurs DLL.

    Ce qui est intéressant aussi, c'est que cela permet de faire partager ton travail sans révéller le contenu de ton code source, juste les .h + lib +dll à distribuer !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Ok, c'est bien ce qu je pensais

    Merci


    Et pour la deuxième question sinon ?
    Je me doute bien que c'est pas évident, mais j'ai essayé de chercher, sans trop de résultats ...

    J'ai regardé du coté du code source de Quake2 (ok, ces peut-être pas le plus évident ), et la méthode utilisée n'est pas évidente.
    Est-ce qu'il faut forcément faire un truc dans ce genre ?

    Merci d'avance

  4. #4
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Ouh la !

    Pour moi la programmation, et ce n'est que mon point de vu, c'est quelque chose qu'on acquier avec le temps et l'expérience, donc non peut et doit regarder plein de petits bout de codes pour voir comment cela fonctionne, mais aussi écrire une grande part par toi même, et ton écriture change sur le long therme, tu t'améliore et c pas du jour au lendemain que tu feras Quake2 d'une traite sans les sources.

    Ou alors on peut voir la prog comme un moyen de faire un jeu, donc cela n'es pas la finalité du code qui importe mais le résultat obtenu.

    Je pense que tu devrais commencer par réfléchir sur un moteur de jeu 3D par toi même, même si cela ne sera pas parfais, et cela ne l'ai jamais, tu apprendras beaucoup !

    Un moteur de jeu peu être vu comme un ensemble de partie a maîtriser pour commencer.

    1er: Afficher une salle de jeu a la quake = Arbre BSP
    2eme: Afficher des personnages = Animation (skinning)
    3eme: Faire des détections de collision sur les persos = Bounding Box
    4eme: Maitriser les matrices de transformation d'OpenGL (ou Direct3D)
    5eme: Faire un big package du tout.

    Alors la c'est juste les bases d'un moteur 3D.
    Ensuite tu peux ajouter, les textures, a faire les models 3D animé, concevoir des niveaux, implémenter un style d'écriture et de lecture de fichier etc....

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    En fait, le jeu que je fais, c'est la conversion d'un jeu de cartes (Mégablast pour ceux qui connaissent) en version 'Video game' , ce qui ne m'empêche pas de m'intéresser à d'autres trucs.


    Ca fait un bot de temps que j'examine le code de Quake2, mais j'ai juste cité cette exemple comme un des moyens d'utiliser une DLL (dans le cas de Quake2, c'est gamex86.dll qui contient les infos du type de jeu en cours)..; Mais bon, on s'égare là


    Ce que j'aurais voulu apprendre, c'est pouvoir mettre une partie de mon code dans une DLL (ou l'équivalent Linux), qui sera chargé lors du lancement de mon exécutable. C'est ce qu'on appelle une librairie dynamique, contrairement au librairie statique.

    En regardant la doc MSDN, ya bien des trucs, mais ca doit concerner que les DLL Windows (les vrais) : création d'une fonction APIENTRY DllMain(...) je crois.
    Mais je doute que se soit portable (à confirmer ?).
    Et je pense qu'il doit y avoir d'autres moyens.

    Comme j'ai encore rien vu la dessus (je pense bien que des articles sur ce sujet existe, mais j'ai pô trouver ), je voulais juste savoir (même si je m'en servirais peut-être pas dans mon jeu).

  6. #6
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    c'est pas très très dur à faire, même assez simple sous windows.

    Il faut placer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #ifdef _LIBRARY_EXPORT_
    #define _DLL_EXPORT __declspec (dllexport) 
    #else
    #define _DLL_EXPORT __declspec (dllimport) 
    #endif
    à inclure dans ton project _LIBRARY_EXPORT_
    ensuite tu places _DLL_EXPORT devant chaque nom de class

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    class _DLL_EXPORT toto
    {...}
    tu compils le tout, cela te donne un .lib + un .dll (tjs sous windows)
    et tu peux te servir de ta class comme d'habitude en incluant bien entendu le .h de la class et le .lib (le .cpp est déja dans ton .lib)

    Et c tout !


    Sous linux c'est différent, si je me trompe pas, cela s'appelle des .a pour l'équivalent .dll sous windows.
    (.o liaison static, .a liaison dynamique) Mais je suis pas spéciliste Linux.

    La compilation en résumé c'est
    Premier makefile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CC=gcc
    OBJS=toto.o 
     
    toto.o: toto.c toto.h
    	$(CC) toto.c -c
     
    library_c.a:$(OBJS)
    	ar -rv library_c.a $(OBJS)
    2eme makefile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ton_program: $(OBJS)
    	$(CC) $(OBJS)  $(SRC)library_Ti_R_c.a $(LIBDIR) $(LIBS) -o $(PROG)
    Voila en gros comment j'ai fais pour compiler ma lib en C sous Irix. Maintenant j'ai pas regarder pour le C++, mais si c'est pas pareil cela doit être très proche sous Irix/Linux/Unix.

    Si tu veux + d'informations pas de prob

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Ok, je vais essayerça !

    Merci

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    Salut,

    je me permets de m'insérer dans la conversation.
    J'ai en projet de développer une appli composée d'un couche interface (GUI) et d'une couche réseau.
    Les deux vont très certainement communiquer à l'aide de XML.

    Mon soucis est de pouvoir développer cette appli sous Windows, Linux et éventuellement MacOS (même si je n'y connais rien du tout en Mac).

    Je veux bien développer la couche interface avec différents langages sous chaque OS, mais je voudrais pouvoir réutiliser la couche réseaux qui va inclure des procédés d'authentification et de chiffrage des données.

    Peut-être existe-t-il des bibliothèques C ou C++ qui font déjà cela ?

    Quelqu'un a-t-il une idée là dessus ?

    Merci

Discussions similaires

  1. Utilisation d'une librairie externe sous VS2012
    Par morgan_2956 dans le forum Débuter
    Réponses: 6
    Dernier message: 28/10/2014, 11h58
  2. utilisation d'une librairie externe
    Par Fidvir dans le forum MATLAB
    Réponses: 0
    Dernier message: 12/03/2008, 17h10
  3. Réponses: 3
    Dernier message: 03/01/2008, 09h53
  4. [Outils][VS2005] Comment utiliser une librairie externe ?
    Par Djangogol dans le forum EDI/Outils
    Réponses: 4
    Dernier message: 25/05/2006, 11h12
  5. Utiliser une librairie graphique
    Par Troopers dans le forum Linux
    Réponses: 6
    Dernier message: 22/08/2003, 11h22

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