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

 C++ Discussion :

Probleme ligne de commande gcc


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Probleme ligne de commande gcc
    Bonjour,

    j'ai un soucis, j'imagine de compilation:
    j'ai un fichier c++ (test.cpp par exemple), 2 headers (h1.h et h2.h) et une dll (h1.dll)
    j'ai bien les #include "h1.h" dans mon fichier cpp.
    lors de la compilation avec gcc, jai des erreurs du genre "undefined reference to" puis le nom de plusieurs fonctions dont les prototypes sont dans h1.h.
    J'arrive à compiler test.cpp pour obtenir test.o, mais je n'arrive pas à faire la suite pour obtenir le test.exe.
    Quelle serait la/les commandes avec gcc pour ça? j'ai l'impression qu'il y a un probleme de commande gcc / link...

    Merci de votre aide

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Si tu parles de dll, tu es sous Windows.

    Une DLL .dll s'accompagne toujours (sauf très rares exceptions et pas pour les débutants) d'un fichier .h pour la compilation et d'un fichier .lib pour le link.

    Si tu n'as pas ces 3 fichiers, il y a peu de chances que tu puisse utiliser ta DLL.

    Globalement et d'après ce que tu dis, tu dois génèrer ton exécutable en 2 phases :
    • La phase de compilation : gcc -c test.cpp -o test.o. Il n'est pas utilie de passer à la phase suivante tant que cette phase produit des erreurs ou des warnings.
    • La phase de link : gcc test.o -o test -lh1.lib

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    J'ai bien le h1.lib dans mon répertoire.
    la première commande (gcc -c test.cpp -o test.o) passe bien et le .o est créé
    la deuxième (gcc test.o -o test -lh1.lib) coince et me répond:


    C:\MinGW\bin\..\lib\gcc-lib\mingw32\3.2.3\..\..\..\..\mingw32\bin\ld.exe: cannot find -lh1.dll

    h1.dll qui est pourtant bien dans le répertoire courant...

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    tu passes bien quelquechose du genre -lh1.lib et il te répond cannot find -lh1.dll ?

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    oops, en fait j'avais essayé aussi en mettant .dll donc jai mal recopié

    jai bien essayé -lh1.lib il répond cannot find -lh1.lib

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Essaye en ajoutant "-L .". Cela permet de spécifier que le répertoire des .lib est ici.

    [EDIT] pour plus de clarté : gcc test.o -o test -lh1.lib -L.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    j'ai ajouté le "-L ." (et sur un autre essai "-L.") à la fin de la deuxième commande et ça ne passe toujours pas

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Pour être précis, c'est gcc test.o -o test -lh1.lib -Lchemin/vers/dossier/ou_se_trouve_h1.lib

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    toujours le cannot find (pour info jai dû mettre -L"C:\Documents and Settings.... pour qu'il m'embete pas avec les espaces dans le chemin)

  10. #10
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Vu ici
    Option de l'éditeur de lien
    Ces options entre en jeu quand le compilateur effectue l'édition des liens des fichiers objets pour créer un fichier de sortie exécutable. Elles n'ont aucune signification particulière si le compilateur ne lance pas la phase d'édition des liens.
    object-file-name
    Un nom de fichier qui ne se termine pas comme un suffixe spécial reconnu est supposé nommer un fichier objet ou une librairie. (Les fichiers objets sont distingués des librairies par l'éditeur de liens en fonction du contenu du fichier.) Si GCC effectue une phase d'édition des liens, ces fichiers objets sont utilisés comme entrée pour l'éditeur des liens.
    -llibrairie
    Utilise la librairie nommée librairie pendant l'édition des liens. L'éditeur de liens recherche la librairie dans une liste standard de répertoires, librairie qui est en fait un fichier s'appelant `liblibrairie.a'. L'éditeur de liens utilise ensuite ce fichier comme s'il avait été spécifié précisément par son nom. Les répertoires de recherche incluent divers répertoires standards du système, plus tous ceux que vous avez spécifiés par `-L'. Normalement, les fichiers trouvés de cette façon sont des fichiers--archives de libaririe dont les membres sont des fichiers objets. L'éditeur de liens manipule un fichier archive en l'examinant pour trouver les membres qui ont déjà été référencés mais pas encore définis. Néanmoins, si l'éditeur de liens trouve un fichier objet ordinaire au lieu d'une librairie, le fichier objet est lié de la façon habituelle. La seule différence entre utiliser l'option `-l' et spécifier un nom de fichier est que `-l' entoure librairie avec `lib' et `.a' et cherche dans plusieurs répertoires.
    -lobjc
    Vous avez besoin de ce cas particulier de l'option -l afin d'effectuer l'édition des liens d'un programme Objective C.
    Il semble donc que j'ai dis une petite bêtise puisque l'option -l va ajouter le préfixe lib et le suffixe .a on nom spécifié par -l

    Essaye alors directement gcc test.o h1.lib -o test

    Donc erreur de ma

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    cette commande ne me met plus de "cannot find", mais je retourne sur une liste de "undefined reference"

  12. #12
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    et les 'undefined reference' sont tous des fonctions ou des variables qui sont définies dans ta dll ?

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    exemple d'une des undefined reference:
    undefined reference to 'ATAG_WriteInitForInstance(unsigned, char*, unsigned)'

    et dans mon h1.h j'ai:
    DLLEXPORT ATAG_WriteInitForInstance (unsigned int, char*, unsigned int);

    je sais pas si ça peut aider mais j'ai testé ça:

    "gcc -L./ -lh1" me retourne un autre problème maintenant:

    C:/MinGW/bin...../libmingw32.a(main.o)(.text+0x97):main.c: undefined reference to 'WinMain@16'

    il n'y a plus qu'un "undefined reference" en erreur, et ce n'est pas le même qu'avant

  14. #14
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    "gcc -L./ -lh1" ou "gcc test.o -L./ -lh1" ?

    Est ce que tu peux poster h1.h ?

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    "gcc -L./ -lh1"


    je viens de tester "gcc test.o -L./ -lh1" il me renvoie toutes les undefined reference

    voici h1.h, qui s'appelle en fait wcl_dll.h mais je voulais simplifier les noms lors de mon premier message:

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    /*==============================================================================
    ================================================================================
    =====                        MODULE DLL WCL_DLL.H                          =====
    ================================================================================
    ==============================================================================*/
     
    #ifndef _WCLDLL
    #define _WCLDLL
    /*##############################################################################
    ##### DEFINITION DES OPTIONS DE LA LIBRAIRIE ###################################
    ##############################################################################*/
    #ifdef VISUAL
     #ifdef FAR_PASC             /* --> MODE UTILISE AVEC DELPHI, VISUAL BASIC... */
     #define DLLEXPORT int FAR PASCAL
     #else
      #ifdef PROPRE              /* --> MODE VISUAL C++ AVEC NOMS PROPRES         */
       #define DLLEXPORT int
      #else
       #ifdef STD                /* --> MODE STDCALL CLASSIQUE                    */
        #define DLLEXPORT extern "C" int __stdcall
       #else                     /* --> MODE VISUAL C++ AVEC NOMS AVEC GARNITURES */
        #define DLLEXPORT _declspec (dllexport) int
       #endif
      #endif
     #endif
    #else
     #ifdef LIB                  /* --> MODE WATCOM NORMAL                        */
      #define DLLEXPORT int __export
     #else                       /* --> MODE PLUS UTILISE                         */
      #define DLLEXPORT int
     #endif
    #endif
    /*############################################################################*/
     
     
    /*##############################################################################
    ##### PROTOTYPES                       #########################################
    ##############################################################################*/
    DLLEXPORT SWimApiOpen       (unsigned int*,
                                 unsigned int,
                                 unsigned int,
                                 unsigned int,
                                 unsigned int,
                                 char*,
                                 unsigned int,
                                 unsigned int,
                                 unsigned int,
                                 char*,
                                 unsigned int,
                                 unsigned int,
                                 unsigned int,
                                 char*,
                                 unsigned int,
                                 char*,
                                 unsigned int);
     
    DLLEXPORT SWimApiClose      (unsigned int, unsigned int);
     
    DLLEXPORT SWimApiSendMessage(unsigned int, char*, char*, unsigned int*);
     
    DLLEXPORT SWimApiGetMessage (unsigned int, char*, char*, unsigned int*);
     
    DLLEXPORT SWimApiWaitSynchro(unsigned int, long);
     
     
    DLLEXPORT ATAG_WriteInitForInstance      (unsigned int, char*, unsigned int);
    DLLEXPORT ATAG_WriteInit                 (char*, unsigned int);
     
    DLLEXPORT ATAG_SetStringValForInstance   (unsigned int, char*, char*);
    DLLEXPORT ATAG_SetStringVal              (char*, char*);
     
    DLLEXPORT ATAG_SetStringValHEXForInstance(unsigned int, char*, char*, unsigned int);
    DLLEXPORT ATAG_SetStringValHEX           (char*, char*, unsigned int);
     
    DLLEXPORT ATAG_ReadInitForInstance       (unsigned int, char*, unsigned int);
    DLLEXPORT ATAG_ReadInit                  (char*, unsigned int);
     
    DLLEXPORT ATAG_GetStringValForInstance   (unsigned int, char*, char*, int);
    DLLEXPORT ATAG_GetStringVal              (char*, char*, int);
     
    DLLEXPORT ATAG_GetStringValHEXForInstance(unsigned int, char*, char*, unsigned int*, int);
    DLLEXPORT ATAG_GetStringValHEX           (char*, char*, unsigned int*, int);
    #endif
    /*##############################   WCL_DLL.H   ###############################*/

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Êtes-vous sûrs au moins que MinGW supporte le format des .lib?
    Il me semblait que non...

  17. #17
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    heu ça j'en ai aucune idée...j'ai testé avec g++ aussi mais c pareil, je sais pas si ça peut donner un indice.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/05/2009, 15h09
  2. Probleme avec la commande gcc
    Par tnouss dans le forum Linux
    Réponses: 7
    Dernier message: 08/12/2006, 12h03
  3. [NetBeans] probleme de passage a la ligne de commande
    Par trollchichon dans le forum NetBeans
    Réponses: 7
    Dernier message: 01/03/2006, 19h57
  4. Votre ligne de commande gcc
    Par sorry60 dans le forum Autres éditeurs
    Réponses: 11
    Dernier message: 16/11/2005, 16h22
  5. Réponses: 3
    Dernier message: 07/04/2003, 20h06

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