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 :

Option linker pthread gcc


Sujet :

C

  1. #1
    Membre habitué
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Points : 166
    Points
    166
    Par défaut Option linker pthread gcc
    Je cherche à compiler avec gcc un programme qui utilise l'entête pthread.h.

    Après mainte recherches j'en conclu qu'il faut compiler comme ça:
    J'ai des "undefined reference to" des fonctions pthread.

    J'ai mis les libs dans /usr/lib/

    pthreadVC2.dll
    pthreadVC2.lib
    libpthreadGC2.a
    pthreadVSE2.lib
    libpthreadGCE2.a
    pthreadGC2.dll
    pthreadGCE2.dll
    pthreadVCE2.dll
    pthreadVCE2.lib
    pthreadVSE2.dll

    J'ai essayé -lpthreadVC2 ça ne marche pas non plus.

    Si quelqu'un a une solution je l'en remercie d'avance.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Juste comme ça ce n'est pas ptrhead.h mais pthread.h

    Ensuite tu peux remonter exactement le message d'erreur que tu as

    Rajouter aussi à la commande le repertoire include : Ipthread ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Membre habitué
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Points : 166
    Points
    166
    Par défaut
    Merci pour l'erreur.

    main.o(.text+0xc9):main.c: undefined reference to `_imp__pthread_create'
    main.o(.text+0xee):main.c: undefined reference to `_imp__pthread_create'
    main.o(.text+0x10a):main.c: undefined reference to `_imp__pthread_join'
    main.o(.text+0x126):main.c: undefined reference to `_imp__pthread_join'
    collect2: ld returned 1 exit status
    mingw32-make: *** [app] Error 1
    Je comprends pas: Ipthread J'ai mis les headers dans usr/include/ donc il n'y a pas besoin non?

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    c'est quoi ton système ?

    normalement -pthread ou -lpthread
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  5. #5
    Membre habitué
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Points : 166
    Points
    166
    Par défaut
    Je suis sous Xp, j'ai gcc 3.4.2 et la lib pthread 2.8.0. J'ai copié les fichiers *.lib et *.dll dans /usr/lib/ et les *.h dans /usr/include/

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Tu compiles depuis une console ?Dans quel repertoire es-tu ? Les lib et include sont dans le PATH?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  7. #7
    Membre habitué
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Points : 166
    Points
    166
    Par défaut
    C:\MinGW\bin\
    C:\MinGW\include\
    C:\MinGW\lib\

    Mon programme est dans:
    E:\Documents\Programmes\Test
    E:\Documents\Programmes\Test\main.c
    E:\Documents\Programmes\Test\header.c
    E:\Documents\Programmes\Test\header.h
    E:\Documents\Programmes\Test\makefile

    Je compile à partir du makefile avec mingw32-make.exe

    Le makefile d'ailleurs:

    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
    EXEC_NAME=app
    CFLAGS=-W -Wall
    LFLAGS=-lphtread
     
    $(EXEC_NAME): header.o main.o
    	gcc -o $@ main.o header.o
     
    header.o: header.c header.h
    	gcc -c header.c $(CFLAGS)
     
    main.o: main.c header.h
    	gcc -c  main.c $(LFLAGS) $(CFLAGS)
     
    clean:
    	del *.o


    Quand tu parles du path tu parles de la variable d'environnement? Si oui j'ai seulement mis C:\MinGW\bin; dedans.

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    oui. Ajoute aussi include et lib.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  9. #9
    Membre habitué
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Points : 166
    Points
    166
    Par défaut
    J'ai rajouté C:\MinGW\include;C:\MinGW\lib; dans le path. Ca ne marche pas.

    Mais il me semble que c'est juste pour trouver des exécutables le path non?

  10. #10
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par Nykoo Voir le message
    J'ai rajouté C:\MinGW\include;C:\MinGW\lib; dans le path. Ca ne marche pas.
    Il faut relancer la console(fermer et la réouvrir)

    Citation Envoyé par Nykoo Voir le message
    Mais il me semble que c'est juste pour trouver des exécutables le path non?
    non
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Nykoo Voir le message
    C:\MinGW\bin\
    C:\MinGW\include\
    C:\MinGW\lib\

    Mon programme est dans:
    E:\Documents\Programmes\Test
    E:\Documents\Programmes\Test\main.c
    E:\Documents\Programmes\Test\header.c
    E:\Documents\Programmes\Test\header.h
    E:\Documents\Programmes\Test\makefile

    Je compile à partir du makefile avec mingw32-make.exe

    Le makefile d'ailleurs:

    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
    EXEC_NAME=app
    CFLAGS=-W -Wall
    LFLAGS=-lphtread
     
    $(EXEC_NAME): header.o main.o
    	gcc -o $@ main.o header.o
     
    header.o: header.c header.h
    	gcc -c header.c $(CFLAGS)
     
    main.o: main.c header.h
    	gcc -c  main.c $(LFLAGS) $(CFLAGS)
     
    clean:
    	del *.o
    Quand tu parles du path tu parles de la variable d'environnement? Si oui j'ai seulement mis C:\MinGW\bin; dedans.
    Il faut indiquer au compilateur où se trouvent les includes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CFLAGS=-W -Wall -IC:\MinGW\include\
    et au linker où se trouvent les bibliothèques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LFLAGS=-LC:\MinGW\lib\ -lphtread
    S'assurer que C:\MinGW\lib\ contient bien libpthread.a

    Ensuite, les DLL doivent être placées dans
    http://emmanuel-delahaye.developpez.com/make.htm

    et le plus important :

    $(LFLAGS) concerne l'édition de lien (linker), donc la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $(EXEC_NAME): header.o main.o
    	gcc -o $@ main.o header.o $(LFLAGS)
    tu dois donc le supprimer de la ligne qui compile main.o :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    main.o: main.c header.h
    	gcc -c  main.c $(CFLAGS)
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Membre habitué
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Points : 166
    Points
    166
    Par défaut
    Merci! Par contre je n'ai pas de fichier libpthread.a Les seuls que j'ai c'est ceux là: ftp://sourceware.org/pub/pthreads-win32/dll-latest/lib/

    D'ailleurs je vois partout parler de libpthread.a mais jamais des libpthreadGC2.a...

    C'est peut être pour la version 1. Enfin sinon ça ne marche pas même en remplaçant -lpthread par -lpthreadGC2... J'ai essayer d'inclure directement avec C:\MinGW\lib\libpthreadGC2.a mais ça ne fonctionne pas non plus.

    Mon makefile ressemble à ça maintenant:
    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
    EXEC_NAME=app
    CFLAGS=-W -Wall -IC:\MinGW\include\
    LFLAGS=-LC:\MinGW\lib\ -lpthreadXX
     
    $(EXEC_NAME): header.o main.o
    	gcc -o $@ main.o header.o $(LFLAGS)
     
    header.o: header.c header.h
    	gcc -c header.c $(CFLAGS)
     
    main.o: main.c header.h
    	gcc -c  main.c $(CFLAGS)
     
    clean:
    	del *.o
    J'ai remplacé XX par toutes les combinaisons possibles VC, VCE, GC...

    J'ai copié les headers suivants dans C:\MinGW\include\

    pthread.h
    sched.h
    semaphore.h
    récupérés d'ici: ftp://sourceware.org/pub/pthreads-wi...atest/include/

    J'ai copié les lib suivantes dans C:\MinGW\lib\

    pthreadVC2.lib
    pthreadVCE2.lib
    pthreadVSE2.lib
    libpthreadGCE2.a
    libpthreadGC2.a
    récupérées d'ici: ftp://sourceware.org/pub/pthreads-win32/dll-latest/lib/

    J'ai copié les Dlls suivantes dans C:\Windows\System32\

    pthreadVC2.dll
    pthreadGC2.dll
    pthreadGCE2.dll
    pthreadVCE2.dll
    pthreadVSE2.dll
    récupérées d'ici: ftp://sourceware.org/pub/pthreads-win32/dll-latest/lib/

    Ma variable path contient entre autres C:\MinGW\lib\ (Mais je doute que ça soit utile).


    Et ça ne marche pourtant pas. Pour info ça fonctionnait dans CodeBlocks quand j'ajoutais pthreadVC2.lib dans les options "linker" avec le bouton add. Ca correspond à l'ajout de C:\MinGW\lib\pthreadVC2.lib dans les commandes du makefile non? J'ai essayé également.

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Nykoo Voir le message
    Merci! Par contre je n'ai pas de fichier libpthread.a Les seuls que j'ai c'est ceux là: ftp://sourceware.org/pub/pthreads-win32/dll-latest/lib/

    D'ailleurs je vois partout parler de libpthread.a mais jamais des libpthreadGC2.a...
    Oui, pardon. Chez moi (Windows XP), c'est effectivement libpthreadGC1.a
    C'est peut être pour la version 1. Enfin sinon ça ne marche pas même en remplaçant -lpthread par -lpthreadGC2... J'ai essayer d'inclure directement avec C:\MinGW\lib\libpthreadGC2.a mais ça ne fonctionne pas non plus.
    Quand tu dis "ça marche pas", il se passe quoi après un make clean ?
    Mon makefile ressemble à ça maintenant:
    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
    EXEC_NAME=app
    CFLAGS=-W -Wall -IC:\MinGW\include\
    LFLAGS=-LC:\MinGW\lib\ -lpthreadXX
     
    $(EXEC_NAME): header.o main.o
    	gcc -o $@ main.o header.o $(LFLAGS)
     
    header.o: header.c header.h
    	gcc -c header.c $(CFLAGS)
     
    main.o: main.c header.h
    	gcc -c  main.c $(CFLAGS)
     
    clean:
    	del *.o
    J'ai remplacé XX par toutes les combinaisons possibles VC, VCE, GC...
    Uniquement ce qu'il y a dans ton répertoire lib.

    Chaque bibliothèque a son rôle. C'est précisé dans la doc

    http://sourceware.org/pthreads-win32/

    Juste un point que j'avais oublié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $(EXEC_NAME): header.o main.o
    	gcc -o $@ main.o header.o $(LFLAGS)
    Il me semble que le -o doit être en dernier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $(EXEC_NAME): header.o main.o
    	gcc main.o header.o $(LFLAGS) -o $@
    Mais il y a bien longtemps que je n'utilise plus les makefile et la ligne de commande... Il faudraoit vérifier dans la doc de gcc (ou plus exactement, du linker de ld).

    J'ai copié les headers suivants dans C:\MinGW\include\

    pthread.h
    sched.h
    semaphore.h
    récupérés d'ici: ftp://sourceware.org/pub/pthreads-wi...atest/include/

    J'ai copié les lib suivantes dans C:\MinGW\lib\

    pthreadVC2.lib
    pthreadVCE2.lib
    pthreadVSE2.lib
    libpthreadGCE2.a
    libpthreadGC2.a
    récupérées d'ici: ftp://sourceware.org/pub/pthreads-win32/dll-latest/lib/
    C'est bien la version pour MinGW ?
    J'ai copié les Dlls suivantes dans C:\Windows\System32\

    pthreadVC2.dll
    pthreadGC2.dll
    pthreadGCE2.dll
    pthreadVCE2.dll
    pthreadVSE2.dll
    récupérées d'ici: ftp://sourceware.org/pub/pthreads-win32/dll-latest/lib/
    OK.
    Ma variable path contient entre autres C:\MinGW\lib\ (Mais je doute que ça soit utile).
    Inutile.
    Et ça ne marche pourtant pas. Pour info ça fonctionnait dans CodeBlocks quand j'ajoutais pthreadVC2.lib dans les options "linker" avec le bouton add. Ca correspond à l'ajout de C:\MinGW\lib\pthreadVC2.lib dans les commandes du makefile non? J'ai essayé également.
    Oui, mais comme expliqué au-dessus, j'ai un doute sur l'ordre des paramètres...
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Membre habitué
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Points : 166
    Points
    166
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Oui, pardon. Chez moi (Windows XP), c'est effectivement libpthreadGC1.a

    Quand tu dis "ça marche pas", il se passe quoi après un make clean ?
    J'ai déplacé -o $@ à la fin et à d'autres positions sans succès. Mais maintenant il a l'air d'avoir trouver libpthreadGC2.a:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    E:\Documents\Programmes\Test>mingw32-make clean
    del *.o
     
    E:\Documents\Programmes\Test>mingw32-make>cr.txt
    gcc: LFLAGS=-LC:\MinGW\lib -lpthreadGC2: Invalid argument
    mingw32-make: *** [header.o] Error 1
    Je ne sais pas comment interpréter "Invalid argument" et Error 1.

    header.h
    header.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <stdio.h>
    #include "header.h"
    void function(void)
    {
        puts("Hi");
    }
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Chaque bibliothèque a son rôle. C'est précisé dans la doc

    http://sourceware.org/pthreads-win32/
    Oui justement c'est pour ça que je link seulement libpthreadGC2.a et pas une autre.

    Citation Envoyé par Emmanuel Delahaye Voir le message
    Juste un point que j'avais oublié :

    Il me semble que le -o doit être en dernier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $(EXEC_NAME): header.o main.o
    	gcc main.o header.o $(LFLAGS) -o $@
    Mais il y a bien longtemps que je n'utilise plus les makefile et la ligne de commande... Il faudraoit vérifier dans la doc de gcc (ou plus exactement, du linker de ld).
    Dans la doc de gcc il ne précisent pas si l'option -o doit être placé à un endroit spécial, ni même dans la doc de ld (http://www.gnu.org/software/binutils.../ld.html#SEC26) Mais pourtant il faut respecter l'ordre pour les -l donc autant mettre -o $@ à la fin.




    Citation Envoyé par Emmanuel Delahaye Voir le message
    C'est bien la version pour MinGW ?
    Justement il y a une confusion de ma part. Dans la FAQ de pthread-win32 à la Q3: http://sourceware.org/pthreads-win32/faq.html

    In general:
    pthread[VG]{SE,CE,C}.dll
    pthread[VG]{SE,CE,C}.lib

    where:
    [VG] indicates the compiler
    V - MS VC
    G - GNU C

    {SE,CE,C} indicates the exception handling scheme
    SE - Structured EH
    CE - C++ EH
    C - no exceptions - uses setjmp/longjmp
    Ca veut dire libpthreadGXX.a est compilé avec GNU C OU ou qu'il doit être utilisé avec GNU C? Je pense que c'est plutôt la 1ère option.

    Encore dans la FAQ:

    Q 6 Should I use Cygwin or Mingw32 as a development environment?
    ---

    Important: see Q7 also.

    Use Mingw32 with the MSVCRT library to build applications that use
    the pthreads DLL.


    Cygwin's own internal support for POSIX threads is growing.
    Consult that project's documentation for more information.
    Donc ça veut dire que c'est bien une version qui marche avec MinGW.
    Je vais suivre cette piste et voir ce qu'est ce MSVCRT. Apparemment c'est une dll...


    Je remets mon makefile actuel:

    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
    EXEC_NAME=app
    CFLAGS=-W -Wall -IC:\MinGW\include\
    LFLAGS=-LC:\MinGW\lib\ -lpthreadGC2
     
    $(EXEC_NAME): header.o main.o
    	gcc main.o header.o $(LFLAGS) -o $@
     
    header.o: header.c header.h
    	gcc -c header.c $(CFLAGS)
     
    main.o: main.c header.h
    	gcc -c  main.c $(CFLAGS)
     
    clean:
    	del *.o
    Sinon j'ai essayé avec d'autres version de gcc make et ld.

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Nykoo Voir le message
    J'ai déplacé -o $@ à la fin et à d'autres positions sans succès. Mais maintenant il a l'air d'avoir trouver libpthreadGC2.a:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    E:\Documents\Programmes\Test>mingw32-make clean
    del *.o
     
    E:\Documents\Programmes\Test>mingw32-make>cr.txt
    gcc: LFLAGS=-LC:\MinGW\lib -lpthreadGC2: Invalid argument
    mingw32-make: *** [header.o] Error 1
    Je ne sais pas comment interpréter "Invalid argument" et Error 1.
    Il est absolument anormal que 'make' ai transformé le $(LFLAGS)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    LFLAGS=-LC:\MinGW\lib\ -lpthreadGC2
     
    $(EXEC_NAME): header.o main.o
    	gcc main.o header.o $(LFLAGS) -o $@
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LFLAGS=-LC:\MinGW\lib -lpthreadGC2
    Ca aurait du être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -LC:\MinGW\lib -lpthreadGC2
    '$(LFLAGS)' est remplacé par '-LC:\MinGW\lib -lpthreadGC2'. C'est très exactement du remplacement de texte.
    Es-tu certain
    • d'utiliser le bon makefile
    • d'avoir posté le bon message ? (copié/colllé)

    header.h
    header.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <stdio.h>
    #include "header.h"
    void function(void)
    {
        puts("Hi");
    }
    Euh, il y a une question là-dessus ?
    Oui justement c'est pour ça que je link seulement libpthreadGC2.a et pas une autre.
    G pour gcc et C pour langage C. OK.
    Je vais suivre cette piste et voir ce qu'est ce MSVCRT. Apparemment c'est une dll...
    MSVCRT = MicroSoft Visual C Run Time library. C'est la bibliothèque d'exécution C de Visual C++.
    Je remets mon makefile actuel:

    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
    EXEC_NAME=app
    CFLAGS=-W -Wall -IC:\MinGW\include\
    LFLAGS=-LC:\MinGW\lib\ -lpthreadGC2
     
    $(EXEC_NAME): header.o main.o
    	gcc main.o header.o $(LFLAGS) -o $@
     
    header.o: header.c header.h
    	gcc -c header.c $(CFLAGS)
     
    main.o: main.c header.h
    	gcc -c  main.c $(CFLAGS)
     
    clean:
    	del *.o
    Je ne vois rien d'anormal, ça devrait fonctionner.
    Pas de Wi-Fi à la maison : CPL

  16. #16
    Membre habitué
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Points : 166
    Points
    166
    Par défaut
    Oui je n'ai qu'un seul makefile:


  17. #17
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Nykoo Voir le message
    Oui je n'ai qu'un seul makefile:
    Très important

    Vérifie qu'il n'y a pas aucun caractère (tab, espaces) à la fin des lignes du makefile. Mon éditeur fait le nettoyage automatiquement avant chaque sauvegarde. Je pense que Notepad++ a aussi ça...

    Vérifie aussi qu'il y a bien un tab avant les commandes (gcc etc.) des lignes de dépendances.

    Je rappelle le format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <cible>[SPACES]:[SPACES]<dépendances>EOL
    TAB<commande> <parametres>EOL
    Pas de Wi-Fi à la maison : CPL

  18. #18
    Membre habitué
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Points : 166
    Points
    166
    Par défaut
    Ah oui fausse joie, je pensais avoir fait une erreur de ce coté là, mais tout est ok:



    Sinon en voulant ajouter la dll de Visual C++ j'ai vu que je l'avais déjà.

    Je vais voir en changeant mon prjet de place et de compilateur...

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Nykoo Voir le message
    Pas mal la visualisation. C'est Notepad++ ?

    Il manque quand même un CRLF à la fin du fichier. Mais ça ne devrait pas expliquer les problème. Je n'ai pas de solution à ton problème.

    Pourquoi tu n'utilises pas tout simplement un IDE comme Code::Blocks ? On a pas tous ces problèmes (c'est lui qui s'occupe des détails scabreux et il le fait bien...)
    Citation Envoyé par Nykoo Voir le message
    Sinon en voulant ajouter la dll de Visual C++ j'ai vu que je l'avais déjà.
    Bah, oui, sinon, aucun programme écrit en C ne pourrait tourner sur ta machine. Ca fait partie du système Windows...
    Pas de Wi-Fi à la maison : CPL

  20. #20
    Membre habitué
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Points : 166
    Points
    166
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Pas mal la visualisation. C'est Notepad++ ?
    Oui la version 4.7.4. Il suffit d'activer l'affichage de tous les caractères avec le bouton quiest le même que dans Word.

    Citation Envoyé par Emmanuel Delahaye Voir le message
    Il manque quand même un CRLF à la fin du fichier. Mais ça ne devrait pas expliquer les problème. Je n'ai pas de solution à ton problème.
    Rajouté.

    Citation Envoyé par Emmanuel Delahaye Voir le message
    Pourquoi tu n'utilises pas tout simplement un IDE comme Code::Blocks ? On a pas tous ces problèmes (c'est lui qui s'occupe des détails scabreux et il le fait bien...)
    Ah oui ça serait plus simple! Mais je suis curieux, c'est justement pour comprendre comment fonctionnent les makefiles que j'ai fait ça. D'ailleurs si je fais de la programmation c'est par curiosité également

    Citation Envoyé par Emmanuel Delahaye Voir le message
    Bah, oui, sinon, aucun programme écrit en C ne pourrait tourner sur ta machine. Ca fait partie du système Windows...
    Ah ok j'apprends un truc là.

    Merci beaucoup pour ton aide je vais tester les makefiles sur d'autres choses. Mais je continue de chercher pour ce problème.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. option -DOS de gcc
    Par Invité dans le forum C++
    Réponses: 3
    Dernier message: 21/09/2009, 20h55
  2. option -O de gcc
    Par wonderyan dans le forum C
    Réponses: 16
    Dernier message: 21/09/2007, 16h18
  3. Options de compilation GCC
    Par oranoutan dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 14/07/2007, 04h10
  4. Option de compilation gcc : sem.h
    Par Luther13 dans le forum Linux
    Réponses: 8
    Dernier message: 29/12/2004, 12h29
  5. Problème avec l'option -static de gcc
    Par lsdInside dans le forum Linux
    Réponses: 2
    Dernier message: 08/05/2004, 01h01

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