Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/06/2006, à 02: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, à 03:09

Link31

Re : La commande gcc ça marche plus???!!!

hassan a écrit :

moi j'aime bien utiliser gcc que g++

Bah ouais mais on ne fait pas toujours ce qu'on veut roll

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, à 03: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, à 03:22)

Hors ligne

#4 Le 18/06/2006, à 03:31

Link31

Re : La commande gcc ça marche plus???!!!

hassan a écrit :

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.

hassan a écrit :

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, à 03: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, à 04: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, à 11: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

tongue

Dernière modification par foobar2000 (Le 18/06/2006, à 12:01)


Aucun rapport avec le logiciel du même nom.

Hors ligne

#8 Le 18/06/2006, à 12: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, à 12: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, à 17:52

Link31

Re : La commande gcc ça marche plus???!!!

gene69 a écrit :

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 tongue

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, à 23: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, à 12: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 07/07/2006, à 00: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 07/07/2006, à 00:57)

Hors ligne

#13 Le 07/07/2006, à 11: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