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 :

Aide sur la compilation séparée


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 43
    Points
    43
    Par défaut Aide sur la compilation séparée
    Bonjour tout le monde!

    J'ai probleme sur la compilation separée.En fait je veux m'y mettre mais j'ai voulu faire un petit teste mais ça marche pas. Donc s'il vous plait donnez moi vos idées pour que je m'en sorte.

    En effet j'ai voulais juste faire un programme simple qui affiche "un messag" dans deux fichier sources differents.

    Dans un premier fichier "module.c" j'ai defini la fonction là voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include<stdio.h>
     
    //fichier source2
    //definition de la fonction qui sera utilisée dans fichier source1
     extern int x; //pour pouvoir utiliser x definie dans source1
     
     
     void ma_fonction(){
      printf("voila le resultat du teste ");
    		}
    Et dans un 2eme fichier "essi.c"j'ai écrit le programme principal suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include<stdio.h>
    #include "module.c" 
     
    main(){
    //appel de la fonction
     
    ma_fonction();
    	}
    Voila le probleme qui survient:
    la compilation du programme principale ça passe bien par contre la compilation du fichier "module.c" ça marche pas et il
    m'affiche :(.text+0x18): référence indéfinie vers « main »
    collect2: error: ld returned 1 exit status

    Chassant que j'utilise ubuntu et j'ai jamais fait la compilation séparée en classe.
    Merci d'avance mes chers amis

  2. #2
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    Salut à toi!

    Pour commencer, peux tu nous donner la ligne de compilation que tu utilises, ou le Makefile que tu utilises?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 43
    Points
    43
    Par défaut
    Veillez m'excuser pour le retard!!!
    j'utilise "gcc module.c -o module" pour la compilation

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Ce qu'il se passe, c'est qu'avec ta ligne de commande, tu compile module.c comme si c'était un programme à lui tout seul.

    Ca marcherai surement mieux en compilant en deux étapes: d'bord la compilation de chaque fichier, puis l'édition des liens pour composer le programme final.
    Ca se passe ainsi:
    gcc -c module.c -Wall -Wextra
    gcc -c essi.c -Wall -Wextra
    gcc module.o essi.o -o module
    tu peux remplacer la derniere commande par
    gcc *.o -o module
    En faisant ainsi, si tu modifie l'un des .c, tu n'auras pas à recompiler l'autre.

    En fait, gcc comprend l'option -c permet de dire "ne pas faire l'édition de lien".
    en rajoutant -Wall et -Wextra, tu auras tous les warnings importants plus tous ceux pouvant poser soucis.

    Une alternative serait d'utiliser gcc *.c -o module.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Quelques autres remarques sur le code :
    • il manque le type de retour du main (int)
    • il ne faut pas inclure le *.c
    • il faut faire des *.h pour "exporter" vers d'autres fichiers *.c ce qui est défini dans un *.c et qu'on souhaite rendre accessible

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    effectivement, je n'avais pas lu le code du tout...
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par leternel Voir le message
    gcc module.o essi.o -o module
    Etant donné que c'est "essi.c" qui contient le main, ce serait plus logique d'écrire gcc module.o essi.o -o essi

    Toutefois, puisque essi.c inclus module.c, on peut alors le considérer comme un programme entier et le compiler en direct gcc essi.c -o essi. Attention, je ne dis pas que c'est bien. En fait, je dis (comme Bktero) que c'est la pire des choses à faire. On n'inclus jamais un ".c" dans un autre ".c". D'une part c'est inutile vu que la compilation séparée permet justement de faire sans ; mais en plus c'est full unsecure (on ne peut plus protéger ses sources contre le piratage). Mais quand on le fait quand-même (après-tout, c'est ça aussi l'avantage d'un truc libre => on est alors totalement libre de faire ses propres conneries !!!), alors on peut le compiler comme je viens de le montrer...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 43
    Points
    43
    Par défaut
    Merci à vous

    Et j'ai deja trouvé la solution

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. aide sur une erreur apres compilation d'un programme
    Par oscarus dans le forum Dev-C++
    Réponses: 0
    Dernier message: 04/02/2014, 20h08
  2. [XL-2002] Aide sur une erreur de compilation macro VBA
    Par Dexter81 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/04/2012, 18h57
  3. aide sur erreur de compilation
    Par dab29 dans le forum Visual Studio Team System
    Réponses: 4
    Dernier message: 07/08/2008, 18h32
  4. aide sur la compilation
    Par m3am3a dans le forum Dev-C++
    Réponses: 0
    Dernier message: 17/11/2007, 13h16
  5. aide sur la compilation d'un programme console
    Par angelo2 dans le forum MFC
    Réponses: 6
    Dernier message: 18/10/2005, 07h44

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