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

Systèmes de compilation Discussion :

Création d'une dll à partir d'un makefile


Sujet :

Systèmes de compilation

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 80
    Points : 48
    Points
    48
    Par défaut Création d'une dll à partir d'un makefile
    Bonjour à tous,

    A force de développer sur le moteur de jeu Unity, j'ai totalement mis de côté (et oublié ) les "pénibles" contraintes pour pouvoir compiler et générer un exe ou dll à partir d'un projet C/C++ (inclure les .lib, les dossiers Include) sans que ça plante du premier coup à la compilation ou à l'édition des liens !

    Je viens de trouver une chouette librairie pour trianguliser des surfaces !
    Problème, il y a un makefile et des lignes de commandes qui ne me parlent plus du tout ! Et il ne me reste aucunes connaissances de mes années DUT

    Ce que je souhaiterais c'est pouvoir créer une dll que j'utiliserais plus tard dans mes projets Unity. Exposer les fonctions qui me seront nécessaires sera une seconde étape !

    Lien librairie

    Si certains pouvaient me guider à travers ce processus, j'en serai fort ravi et reconnaissant !

    Merci d'avance !

  2. #2
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    Salut,

    Crée un nouveau projet DLL dans visual Studio et ajoute les fichiers triangle.c et triangle.h.
    dans le fichier triangle.c, ajoute
    à la ligne 342.

    Essaye de compiler et regarde si ça donne des erreurs (pas de VS sous la main pour tester).

    Pitite explication
    La compilation du projet sous Linux avec Make donne la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cc -O -DLINUX -I/usr/X11R6/include -L/usr/X11R6/lib -o ./triangle ./triangle.c -lm
    En gros ça compile le fichier triangle.c en l'exécutable triangle.

    Or, comme il s'agit d'une bibliothèque, on s'attendrait plutôt à ce qu'il génère un .so (équivalent de dll sous Linux).
    Et c'est là qu'il y a une bidouille un peu dégueu : le fichier triangle.c peut être utilisé pour générer soit une bibliothèque soit un exécutable.
    Par défaut il génère un exécutable mais si on ajoute le define TRILIBRARY il passe en mode bibliothèque.
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 80
    Points : 48
    Points
    48
    Par défaut
    Merci alex pour cette réponse.
    Je n'ai pas encore réussi à compiler correctement.

    J'ai bien rajouté le #define TRILIBARY

    1ère modif' dans triangle.c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #ifndef NO_TIMER
    #include <sys/time.h>
    #endif /* not NO_TIMER */
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #ifndef NO_TIMER
    #include <time.h>
    #endif /* not NO_TIMER */
    en incluant le répertoire d'include de VC 10, où est installé mon visual studio 2010 (C:\Program Files\Microsoft Visual Studio 10.0\VC\include).

    Ensuite j'avais des erreurs m'indiquant que la struct de type timeval vers la ligne 15700 était inconnue. En recherchant sur google, cette structure est définie dans winsock2.h.
    J'ai dl et inclus ce header dans mon projet.

    Maintenant j'ai toute une série d'erreurs dans winnt.h...

    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
     
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(2143): error C2016: C requires that a struct or union has at least one member
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(2143): error C2061: syntax error : identifier 'LONG'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(2145): error C2059: syntax error : '}'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(2179): error C2016: C requires that a struct or union has at least one member
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(2179): error C2061: syntax error : identifier 'CONTEXT_CHUNK'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(2187): error C2061: syntax error : identifier 'Legacy'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(2187): error C2059: syntax error : ';'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(2197): error C2061: syntax error : identifier 'XState'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(2197): error C2059: syntax error : ';'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(2199): error C2059: syntax error : '}'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(2235): error C2065: 'LONG' : undeclared identifier
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(2235): error C2064: term does not evaluate to a function taking 305 arguments
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(2235): error C2143: syntax error : missing ')' before 'type'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3648): error C2143: syntax error : missing ')' before 'const'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3648): error C2143: syntax error : missing '{' before 'const'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3649): error C2146: syntax error : missing ';' before identifier 'Offset'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3650): error C2059: syntax error : ')'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3654): error C2143: syntax error : missing ')' before '*'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3654): error C2143: syntax error : missing '{' before '*'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3654): error C2373: 'Base' : redefinition; different type modifiers
    1>          c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3648) : see declaration of 'Base'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3655): error C2373: 'LONG' : redefinition; different type modifiers
    1>          c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3649) : see declaration of 'LONG'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3655): error C2146: syntax error : missing ';' before identifier 'Offset'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3656): error C2059: syntax error : ')'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3660): error C2143: syntax error : missing ')' before '*'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3660): error C2143: syntax error : missing '{' before '*'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3660): error C2373: 'Base' : redefinition; different type modifiers
    1>          c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3648) : see declaration of 'Base'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3661): error C2373: 'LONG' : redefinition; different type modifiers
    1>          c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3649) : see declaration of 'LONG'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3661): error C2146: syntax error : missing ';' before identifier 'Offset'
    1>c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(3662): error C2059: syntax error : ')'
    Et là je bloque un peu, je trouve pas ma réponse sur le net

  4. #4
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #undef NO_TIMER
    #ifndef NO_TIMER
    #include <sys/time.h>
    #endif /* not NO_TIMER */
    Citation Envoyé par kev42100 Voir le message
    J'ai dl et inclus ce header dans mon projet.
    Pas une bonne idée de prendre un header comme ça
    En général un header ne vient pas tout seul : il fait partie d'une bibliothèque et a d'autres dépendances.
    Si tu le prends tout seul, il risque de te manquer un paquet de définitions (ou que ce qui est défini dans ton header ne corresponde pas à la version de l'environnement de développement dont tu disposes).
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

Discussions similaires

  1. [Débutant] Création d'une dll à partir d'un code Matlab
    Par JNdrix dans le forum MATLAB
    Réponses: 4
    Dernier message: 27/11/2014, 13h11
  2. Réponses: 8
    Dernier message: 27/07/2012, 14h59
  3. [Net]Création d'une URL à partir d'une File
    Par maxvador dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 11/12/2005, 21h22
  4. Problème de création d'une dll...
    Par adrien954 dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/10/2005, 10h46
  5. Conventions à utiliser pour la création d'une DLL
    Par Writer dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2005, 09h24

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