Découpe d'un programme c++

Découpe d'un programme c++ - C++ - Programmation

Marsh Posté le 13-11-2015 à 00:57:52    

Bonsoir,  
donc j'ai trois fichiers fonction.cpp somme.cpp & somme.h  
fonction.cpp  
 
 
#include<iostream>
#include<fstream>
#include"somme.h"
 
using namespace std;
 
int main(void){
int a=5,b=3;
int c=sommedexety(a,b);
cout <<  "somme = " << c << endl;
 
return 0;
}
 
somme.cpp  
 
#include"somme.h"
int sommedexety(int a,int b) {
return a+b;
}
 
 
somme.h
 
#ifndef SOMME_H_INCLUDED
#define SOMME_H_INCLUDED
int sommedexety(int a,int b);
#endif // SOMME_H_INCLUDED
 
lorsque je compile avec " c++ -Wall -Wextra fonction.cpp -o fonction " c'est peut etre pas la bonne syntaxe mais j'obtiens comme message d'erreur
 
/tmp/ccsC70X1.o: dans la fonction <<main>>:
fonction.cpp:(.text+0x29): référence indéfinie vers <<sommedexety(int, int)>>
collect2: error: ld returned 1 exit status
 
sachant que je bosse sur une VirtualBox installée sur une clé.
 
Merci pour votre aide

Reply

Marsh Posté le 13-11-2015 à 00:57:52   

Reply

Marsh Posté le 13-11-2015 à 12:38:20    

ben tu compiles pas somme.cpp avec ta ligne de commande, donc pas étonnant que le linker râle.
 
sous g++ je ferais
g++ -Wall -o fonction.exe fonction.cpp somme.cpp
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 13-11-2015 à 19:50:06    

Effectivement, même en essayant de préalablement compilé somme.cpp, ça ne marche pas. Toutefois avec codeblocks ça fonctionne, Merci en tout les cas  

Reply

Marsh Posté le 13-11-2015 à 20:48:45    

Si tu veux compiler un a un:
g++ -Wall -c somme.cpp
g++ -Wall -c fonction.cpp
g++ -Wall -o fonction.exe fonction.o somme.o  
 
Ou un mix des deux:
g++ -Wall -c somme.cpp
g++ -Wall -o fonction.exe fonction.cpp somme.o  
 
De toute façon, dans la phase finale, au moment du link, on va linker fonction.o et somme.o (qui auront été créés, de manière explicite, ou implicite) pour générer l'exécutable.
La seule différence entre la première et la seconde méthode ci-dessus, c'est que dans la première je demande de façon explicite de compiler somme.cpp et fonction.cpp comme modules objets (.o) et ils seront encore la après la phase de link et la génération de l'exécutable, tandis que dans la seconde, je demande de façon explicite de compiler somme.cpp comme module objet et de façon implicite (et donc temporaire) pour fonction.cpp, et après la phase de link et la génération de l'exécutable, somme.o sera encore la, mais fonction.o aura été effacé.
 
A+,


Message édité par gilou le 13-11-2015 à 21:00:52

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 13-11-2015 à 21:22:13    

ça fonctionne ! en fait je croyais que j'avais que c++ comme compilateur (ce que le prof a dit) ça marche egalement avec g++.  
Thanks ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed