compilation C hello world

novicemac0

Membre confirmé
2 Avril 2008
35
1
Bonjour,

Je souhaite compiler le fichier c suivant :

#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl; cout << "Welcome to C++ Programming" << endl; }


J'obtiens l'erreur suivant en compilant (gcc -Wall -Werror test_hello.c -o test_hello) :

test_hello.c:1:20: error: iostream: No such file or directory
test_hello.c:2: error: parse error before 'namespace'
cc1: warnings being treated as errors
test_hello.c:2: warning: type defaults to 'int' in declaration of 'std'
test_hello.c:2: warning: data definition has no type or storage class
test_hello.c: In function 'main':
test_hello.c:5: error: 'cout' undeclared (first use in this function)
test_hello.c:5: error: (Each undeclared identifier is reported only once
test_hello.c:5: error: for each function it appears in.)
test_hello.c:5: error: 'endl' undeclared (first use in this function)
test_hello.c:5: warning: control reaches end of non-void function


Le compilateur est gcc4, installer par défaut sur mac os x. Je suppose qu'il faut indiquer au compilateur ou se trouve iostream, mais comment faire?

Merci d'avance.
 
  • J’aime
Réactions: eseldorm
Deja ce n'est pas du c mais du c++, l'extension de ton fichier doit etre cpp et le projet configuré en tant que tel.

Cordialement
Mon fichier a bien l'extension cpp et non c. Par contre mon projet se résume au fichier cpp. J'ai sùrement oublié quelquechose (la variable d'environnement PATH pour les include et les lib?)
 
Contrairement à g++, gcc n'intègre pas la librairie standard dans sa commande de compilation. Il faut l'ajouter avec le flag -l.
 
Contrairement à g++, gcc n'intègre pas la librairie standard dans sa commande de compilation. Il faut l'ajouter avec le flag -l.

J'ai bien ajouté le flag -l (gcc -l -Wall -Werror test_hello.c -o test_hello), mais j'obtiens toujours une erreur :
In file included from /usr/include/c++/4.0.0/backward/iostream.h:31,
from test_hello.cpp:1:
/usr/include/c++/4.0.0/backward/backward_warning.h:32:2: error: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.

Et toujours pas de trace d'exécutable ...
 
tu as un certain nombre de symbol-stubed sous OSX pour permettre une compatibilité transitional-UNIX03; UNIX03-nonblocking; non-UNIX03; ce sont des headers avec une reecriture asm on-fly lors de la compilation suivant la platforme et les versions de la stdlib et les reglages internes de gcc (e.g la platforme), ce qui donne

Bloc de code:
sym _toto
if UNIX03-nonblocking
  rewrite _toto$UNIX03$non_lazy_ptr
ce n'est qu un exemple, ceci dit utilise g++ comme on te l'a dit (ou gcc avec les options g++ c'est un alias, ce que fait xcode), de plus tu aurais le meme probleme sur un linux64 pour les meme raisons, mais tout ca est accentue sous osx e.g fat-binaire sym + retro compatibilite avec standard en effet les reecritures peuvent etre differentes suivant l'arch targeted, la version de l'OS targeted ecetera

Bloc de code:
>$ g++ hello[COLOR=Red].cpp [/COLOR]
>$ ./a.out 
Hello World!
Welcome to C++ Programming
ou

Bloc de code:
>$ gcc hello[COLOR=Red].cpp [/COLOR]-lstdc++
>$ ./a.out 
Hello World!
Welcome to C++ Programming
dans ton cas cela passe d'en autres plus complexes... il y a bien d'autres drapeaux gerer par g++ pour satisfaire ld avec tout ce systeme de reecritures on-fly, by the way la doc gcc dit: g++ pour compiler du c++ ou du C accole avec d'autres obj c++

@ntx said Contrairement à g++, gcc n'intègre pas la librairie standard dans sa commande de compilation.


donc ecoute ce qu'on te dit sur ce forum , tu m'eviteras de rabacher, chose que je n'aime pas trop.