#1 Le 18/06/2006, à 01:28
- hassan
La commande gcc ça marche plus???!!!
Bonjour J'ai fait un simple codage pour tester c'est koi le probleme:
( probleme résolu avec g++ )
#include<iostream>
using namespace std;
int main() {
cout<<"debut:\n";
return 0;
}et puis je tape gcc -o temp test.cpp et voila ce qu'il m'affiche:
/tmp/ccouY8iE.o : Dans la fonction "main":test.cpp:(.text+0x27): référence indéfinie vers « std::cout »
:test.cpp:(.text+0x2c): référence indéfinie vers « std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)»
/tmp/ccouY8iE.o : Dans la fonction "__tcf_0":test.cpp:(.text+0x46): référence indéfinie vers « std::ios_base::Init::~Init()»
/tmp/ccouY8iE.o : Dans la fonction "__static_initialization_and_destruction_0(int, int)":test.cpp:(.text+0x6f): référence indéfinie vers « std::ios_base::Init::Init()»
/tmp/ccouY8iE.o:(.eh_frame+0x11): référence indéfinie vers « __gxx_personality_v0 »
collect2: ld a retourné 1 code d'état d'exécution
Mais avec g++ ça marche sans aucun probleme, je me demande est ce que le probleme c'est dapper, (moi j'aime bien utiliser gcc que g++)
Hors ligne
#2 Le 18/06/2006, à 02:09
- Link31
Re : La commande gcc ça marche plus???!!!
moi j'aime bien utiliser gcc que g++
Bah ouais mais on ne fait pas toujours ce qu'on veut
OK je sors => [..
Enfin avant de sortir je préciserai que g++ est pour le C++ et que gcc fonctionne très bien avec le C. Il faut bien que le compilateur sache quel langage tu utilises, non ?
..]
Hors ligne
#3 Le 18/06/2006, à 02:19
- hassan
Re : La commande gcc ça marche plus???!!!
non, le probleme que gcc ça marche chez moi avant de faire des mise à jour. mais ce que je crois que gc qui est pour C et gcc pour C++ (je sais meme pas ce que gc existe ou non) comme TC et TCC? non?
Il faut bien que le compilateur sache quel langage tu utilises, non ?
ça j'ai aucune idée, je ne comprend pas !!!
Dernière modification par hassan (Le 18/06/2006, à 02:22)
Hors ligne
#4 Le 18/06/2006, à 02:31
- Link31
Re : La commande gcc ça marche plus???!!!
non, le probleme que gcc ça marche chez moi avant de faire des mise à jour. mais ce que je crois que gc qui est pour C et gcc pour C++ (je sais meme pas ce que gc existe ou non) comme TC et TCC? non?
gc existe, mais ça n'a rien à voir avec un compilateur. Mais tu peux utiliser cc pour compiler du C si ça te semble plus facile à retenir.
lI faut bien que le compilateur sache quel langage tu utilises, non ?
ça j'ai aucune idée, je ne comprend pas !!!
Quand tu utilises cc, la collection de compilateurs GNU (GNU Compiler Collection) sait qu'il faut compiler du C. Quand tu utilises g++, elle sait qu'il faut compiler du C++. Et quand tu utilises gcc, l'action par défaut est de compiler du C, ce qui explique les erreurs que tu obtiens avec ton code C++.
Maintenant pourquoi c'est comme ça et pas autrement, je n'en sais rien...
Hors ligne
#5 Le 18/06/2006, à 02:42
- hassan
Re : La commande gcc ça marche plus???!!!
j'ai tester gcc avec ça
#include<stdio.h>
int main() {
printf("debut:\n");
return 0;
}
l'extension de fichier n'as aucune importance (.c ou .cpp ça change rien) ici gcc ça marche;
Je comprend plus rien; vous avez raison, et pk avant ça marchait, ok, laisse tomber, je comprend plus rien
MERCI QUAND MEME POUR TES REPONSES, MERCI BCP
Hors ligne
#6 Le 18/06/2006, à 03:22
- Link31
Re : La commande gcc ça marche plus???!!!
C'est simple : le code que tu viens de me montrer est du C, pas du C++. Donc gcc, qui compile du C, ne donne pas d'erreur.
Par contre si tu avais essayé de compiler du C++ :
#include <iostream>
int main() {
std::cout << "debut:" << std::endl;
return 0;
}
... ça n'aurait pas fonctionné avec gcc. Il aurait fallu utiliser g++.
Hors ligne
#7 Le 18/06/2006, à 10:45
- foobar2000
Re : La commande gcc ça marche plus???!!!
Ce qui m'etonne quand meme c'est que gcc pete des messages d'erreurs de g++. A ma connaissance, il n'y a pas de namespace en C, donc il aurait du dire qu'il y avait une erreur de syntaxe. En plus il a l'air d'avoir reussi a trouver le fichier iostream.
$ cat terst.cpp
#include <iostream>
using namespace std;
int main ()
{
return 0;
}
$ gcc terst.cpp
/tmp/ccAKsgFk.o : Dans la fonction "__tcf_0":terst.cpp:(.text+0x32): référence indéfinie vers « std::ios_base::Init::~Init()»
/tmp/ccAKsgFk.o : Dans la fonction "__static_initialization_and_destruction_0(int, int)":terst.cpp:(.text+0x5b): référence indéfinie vers « std::ios_base::Init::Init()»
/tmp/ccAKsgFk.o:(.eh_frame+0x11): référence indéfinie vers « __gxx_personality_v0 »
collect2: ld a retourné 1 code d'état d'exécution
$ mv terst.cpp terst.c
$ gcc terst.c
terst.c:1:20: erreur: iostream : Aucun fichier ou répertoire de ce type
terst.c:3: erreur: syntax error before «namespace»
terst.c:3: attention : la définition de données n'a pas de type ni de classe de stockage
Apparemment gcc sait compiler du c++ et il faut juste lui donner les chemins pour trouver les bibliotheques.
Edit : man gcc me donne
gcc - GNU project C and C++ compiler
Dernière modification par foobar2000 (Le 18/06/2006, à 11:01)
Aucun rapport avec le logiciel du même nom.
Hors ligne
#8 Le 18/06/2006, à 11:50
- gene69
Re : La commande gcc ça marche plus???!!!
en pratique je crois que l'extention à une importance.
man gcc ligne 455
For any given input file, the file name suffix determines what kind of
compilation is done:file.c
C source code which must be preprocessed.file.i
C source code which should not be preprocessed.file.ii
C++ source code which should not be preprocessed.file.m
Objective-C source code. Note that you must link with the libobjc
library to make an Objective-C program work.
file.mi
Objective-C source code which should not be preprocessed.file.mm
file.M
Objective-C++ source code. Note that you must link with the
libobjc library to make an Objective-C++ program work. Note that
.M refers to a literal capital M.file.mii
Objective-C++ source code which should not be preprocessed.file.h
C, C++, Objective-C or Objective-C++ header file to be turned into
a precompiled header.file.cc
file.cp
file.cxx
file.cpp
file.CPP
file.c++
file.C
C++ source code which must be preprocessed. Note that in .cxx, the
last two letters must both be literally x. Likewise, .C refers to
a literal capital C.file.hh
file.H
C++ header file to be turned into a precompiled header.file.f
file.for
file.FOR
Fortran source code which should not be preprocessed.file.F
file.fpp
file.FPP
Fortran source code which must be preprocessed (with the tradi‐
tional preprocessor).file.r
Fortran source code which must be preprocessed with a RATFOR pre‐
processor (not included with GCC).
file.f90
file.f95
Fortran 90/95 source code which should not be preprocessed.file.ads
Ada source code file which contains a library unit declaration (a
declaration of a package, subprogram, or generic, or a generic
instantiation), or a library unit renaming declaration (a package,
generic, or subprogram renaming declaration). Such files are also
called specs.file.adb
Ada source code file containing a library unit body (a subprogram
or package body). Such files are also called bodies.file.s
Assembler code.file.S
Assembler code which must be preprocessed.
other
An object file to be fed straight into linking. Any file name with
no recognized suffix is treated this way.You can specify the input language explicitly with the -x option:
Le prochain qui dit une bétise qui crois qu'il y a une entête mime sur un fichier texte je je condamne à recopier 10 fois man gcc à la main.
L'extention du fichier compte. je persiste.
Dernière modification par gene69 (Le 18/06/2006, à 11:51)
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#9 Le 18/06/2006, à 16:52
- Link31
Re : La commande gcc ça marche plus???!!!
Le prochain qui dit une bétise qui crois qu'il y a une entête mime sur un fichier texte je je condamne à recopier 10 fois man gcc à la main.
Si si, j'ai un Doxyfile qui est reconnu comme un fichier source java
Enfin tu dois avoir raison, gcc compile sûrement le C++ si on lui donne les bonnes inclusions, mais si on ne lui donne pas il ne peut compiler que du C... Le mieux c'est encore d'utiliser cc et g++ comme ça il n'y a pas de confusion possible.
Hors ligne
#10 Le 18/06/2006, à 22:22
- hassan
Re : La commande gcc ça marche plus???!!!
en pratique je crois que l'extention à une importance.
l'extension de fichier n'as aucune importance (.c ou .cpp ça change rien)
Quand je dit ça .c ou .cpp c'est juste pour ces extension, j'ai ecri un fichier en c++ mais l'extension en .c, mais ça marchait. (avec g++)
Hors ligne
#11 Le 06/07/2006, à 11:56
- abdeslem
Re : La commande gcc ça marche plus???!!!
l'extension en unix en n'a pas d'importance c'est ce quil ma dit mon prof d'unix
mais lorsque je compile avec gcc le fichier code.c est e un premier lieu transormer en code.o ba la je vois bien que l'extension a un role mais peut etre juste avec gcc
Hors ligne
#12 Le 06/07/2006, à 23:53
- lunique
Re : La commande gcc ça marche plus???!!!
Quand on parle d'extensions, il faut faire attention :
si on utilise les commandes linux, l'extension des fichier n'aura pas d'importance. Tu peux appeller ton fichier de log toto.txt, toto.exe ou toto, le systeme s'en tamponne, idem pour les script, on meme les programmes ( tu peux compiler un programme qui s'appellera plop.txt et le lancer avec la commande " $ plop.txt" et sa marchera.
Par contre, je peux ecrire un script qui m'affiche quelque chose en fonction de l'extension des fichiers passés en parametre (par exemple, le faire afficher fichier texte si je lui passe un fichier.txt ou film pour une extension .mpg). Et là, ce n'est pas unix qui gere les extensions mais mon script.
Pour le systeme un fichier texte est un fichier texte. Qu'il se termine par .C .c .h .cpp il va le traiter tout pareil, il ne sait meme pas ce que sa veut dire un "printf("hello");" , c'est juste qu'il y a des options configuré dans gcc par defaut pour certains type d'extensions.
-x language
Specify explicitly the language for the following input files
(rather than letting the compiler choose a default based on the
file name suffix). This option applies to all following input
files until the next -x option. Possible values for language are:c c-header c-cpp-output
c++ c++-header c++-cpp-output
objective-c objective-c-header objective-c-cpp-output
objective-c++ objective-c++-header objective-c++-cpp-output
assembler assembler-with-cpp
ada
f77 f77-cpp-input ratfor
f95
java
treelang
a premiere vue, tu peux redefinir la nature de chaque fichier en entrée à la main ^^
Pour la transformation en fichier .o, c'est parce que tu fait la compilation en deux fois je pense, avec un gcc -c essai.c qui te genere un fichier essai.o par defaut (faut bien une valeur par defaut) mais que tu aurai pu appeller essai.toto en utilisant la comamnde gcc -c essai.c -o essai.toto et tu peux te servir tu essai.toto exactement de la meme facon que le essai.o
Dernière modification par lunique (Le 06/07/2006, à 23:57)
Hors ligne
#13 Le 07/07/2006, à 10:14
- gene69
Re : La commande gcc ça marche plus???!!!
oui M le professeur d'unix a toujours raison. Sur mon bureau j'ai un fichier "convocation.pdf" avec une belle icone "ps".
je suis d'accord. Si on prend la peine d'écrire en toute lettre que l'on veut compiler "fichier.cobol" en c++ moi je suis d'accord: l'extention n'a aucune importance (venez quand même m'expliquer comment gcc distingue le header du source).
je doute que beaucoup de monde aime se compliquer la vie à ce point là.
Ps: ya pas eu un déterrage de discussion là?
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne