Comment compiler et EXECUTER un "Hello World!!!" ???

Comment compiler et EXECUTER un "Hello World!!!" ??? - Linux et OS Alternatifs

Marsh Posté le 01-07-2002 à 22:54:46    

Bonsoir à tous. Ca va surement vous paraître tout bete comme question. Mais je suis sous linux depuis 1 semanine à peine! Alors voilà, je crée un nouveau fichier a.cpp avec la commande "emacs a.cpp". Ensuite, je tape mon code que voici :
 
#include <stdlib.h>
#include <iostream.h>
 
int main(){
  cout<<"Hello World!!!"<<endl;
  return(EXIT_SUCCESS);
}
 
Je sauve, je quitte. Je fais g++ a.cpp et ça me crée un fichier a.out ds le répertoire courant. J'essaye de l'executer en tapant "a.out" et ça me fait "no such command" J'ai essayé avec l'option "-c" mais d'après le man c'est uniquement pour la compilation (pas de linkage) Alors en cherchant un peu je trouve la commande ld pour le linker GNU ??? En faisant "ld -o a.exe a.out" ca me crée mon a.exe ;-) MAIS!! Encore une fois je n'arrive pas à l'éxecuter en tapant "a.exe" ou "a" tout court j'obtient "no such command". Comment executer mon programme et est-ce que l'extension .exe à la même signification sous linux que sous windows? Merci d'avance pour vos réponses.

Reply

Marsh Posté le 01-07-2002 à 22:54:46   

Reply

Marsh Posté le 01-07-2002 à 22:58:02    

./a.out

Reply

Marsh Posté le 01-07-2002 à 22:58:22    

j'y conais rien au C mais si t'as pas mis ton "a" dans le path, il faut le lancer depuis ou il se trouve en tapant ./a
 
a+


---------------
FeedBack
Reply

Marsh Posté le 01-07-2002 à 22:58:46    

merde grillaaaiiiiidddddd !


---------------
FeedBack
Reply

Marsh Posté le 01-07-2002 à 22:59:24    

;)

Reply

Marsh Posté le 01-07-2002 à 22:59:53    

dans le répertoire où se trouve a.out, tape :
./a.out
 
explication: quand un executable ne se trouve pas dans le PATH, il faut préciser le chemin (ici ./) pour le lancer.

Reply

Marsh Posté le 01-07-2002 à 23:23:08    

>xdmj: Génial!! Ca fonctionne! Thx pour ta rapidité! Donc si je comprends bien les "*.out" ne sont pas les modules objets mais les exectutables? C'est bien ca? ".out" ss linux == ".exe" ss windows ??
 
>karoli: Merci aussi mais tu es vachement plus lent ;-)grillaaaiiiiidddddd, c'est quoi ca?
 
>matmat: Au fait le "PATH" c quoi exactement? C'est pas une variable d'environnement similaire à "PATH" sous windows qui contient tout les répertoires pour lesquels on peux éxecuter direcement les programmes contenu ds ces répertoires?? Si c'est ce que je pense, comment, sous linux, peux - t - on enrichir cette variable pour par exemple ajouter mon "/home/." ??
 
Merchiii!

Reply

Marsh Posté le 01-07-2002 à 23:32:18    

les .o c les fichiers objets, dans ton cas tu as pas le temps de les voir, ils sont linké directos, et hop binaire..
 
sous Linux y a pas de .exe; c juste un attribut, par ex pour rendre un script executable tu fait chmod +x fichier et voila, fichier est considéré comme un binaire a part entiere..
 
la PATH c un ensemble de repertoire (genre

Code :
  1. /bin:/usr/bin:/usr/local/bin,

etc)
 
et en effet les rep/sous-rep /bin /sbin contiennent tous les binaires, c beaucoup plus logique comme raisonnement que des rep ertoires disparates (program files et autres conneries)
 
pour enrichir ton PATH, si tu utilises bash ( 98 % de chance) tapes :
 

Code :
  1. PATH=$PATH:/home/tonnom/bin


 
(je te conseille de faire un rep bin et un lib dans ton home, c plus pratique quand tu prog :)
 
edit: merd j'arrive po avec ces balises, remplace :/ par : / (sans espace)


Message édité par monokrome le 01-07-2002 à 23:34:40
Reply

Marsh Posté le 02-07-2002 à 00:43:03    

>>monokrome: Purée de purée je commence à me rendre compte que Linux est nettement mieux que Windows! Ca fait à peine une semaine que je le découvre et je trouve qu'il a été bcp mieux pensé et qu'il est plus simple que windows finallement! T'as as tout à fait raison pour le truc des "program files" et autres! C'est moins logique. J'aime bien cette idée d'attribut pour un executable! Et puis le fait de pouvoir "monter" ce qu'on veux où on veux! On a plus tout les A: C: D: E: et autres! Ce que j'aime aussi c'est l'unique pts de départ "/" Bref Linux c'est vraiment bien ;-)
 
Pour revenir au sujet, merci pour tes infos sur "PATH". Tu as raison pour le rep "/bin" et "/lib" ds le "/home", c'est pas bete. Alors, autre question : J'aimerai utiliser le fichier "conio.h" qui était par défaut sur mon compilateur BCC sous windows. Où dois je le placer pour qu'il sois avec les autre fichier genre "iostream.h", ... ??
 
Thx


Message édité par mexx20 le 02-07-2002 à 00:43:56
Reply

Marsh Posté le 02-07-2002 à 00:54:04    

si je peux emettre une pitite reserve :
le /home dans le path c'est moyen niveau secu...
si un mec arrive a se logguer sur ta becane sous ton nom,donc pas en root il pourra ecrire et executer ce qui s'y trouve...
c'est chaud
 
edit: grillaid pcke il m'a grille...suis trp lent !
m'enfin de 20 secondes  :na:


Message édité par karoli le 02-07-2002 à 00:55:59

---------------
FeedBack
Reply

Marsh Posté le 02-07-2002 à 00:54:04   

Reply

Marsh Posté le 02-07-2002 à 01:24:25    

monokrome a écrit
les .o c les fichiers objets, dans ton cas tu as pas le temps de les voir, ils sont linké directos, et hop binaire..
 
sous Linux y a pas de .exe; c juste un attribut, par ex pour rendre un script executable tu fait chmod +x fichier et voila, fichier est considéré comme un binaire a part entiere..
 
la PATH c un ensemble de repertoire (genre

Code :
  1. /bin:/usr/bin:/usr/local/bin,

etc)
 
et en effet les rep/sous-rep /bin /sbin contiennent tous les binaires, c beaucoup plus logique comme raisonnement que des rep ertoires disparates (program files et autres conneries)
 
pour enrichir ton PATH, si tu utilises bash ( 98 % de chance) tapes :
 

Code :
  1. PATH=$PATH:/home/tonnom/bin


 
(je te conseille de faire un rep bin et un lib dans ton home, c plus pratique quand tu prog :)
 
edit: merd j'arrive po avec ces balises, remplace :/ par : / (sans espace)
 
 
------
 
cai plus lisible ;)


Message édité par localhost le 02-07-2002 à 01:26:21

---------------
#!/usr/bin/girl
Reply

Marsh Posté le 02-07-2002 à 01:27:14    

j'ai pas dit /home mais un rep /home/bin dans le path nuance  :)  
 
de ttes facons si kkun a réussi a se logguer sur son compte il a sans doute bien mieux a faire que de se précoccuper du $PATH nan ?
 
bah les gens sérieux ne travaillent pas sur la machine reliée au net  
 
 :D  
 
sinon pour tes header, personnellement (ca engage que moi donc, sur ma machine ou g que mon compte), g fait un rep /home/nom/include et quand je compile une de mes applis je rajoute a la commande pour compiler (au makefile enfin bon je simplifie)  
 
-I/home/tonnom/include
 
ou alors tu met tes headers a toi dans un sous-rep de tes sources et dans ton code tu fout  
 
 
 
 

Code :
  1. #include "monhead.h"
  2. ou #include "heads/monhead.h"

 
 
le + important étant de comprendre que <> définit un fichier systeme et "" un fichier "local"
 
sinon pour en revenir a l'arborescence, c comme ca depuis 30 ans (Unix), ca a fait ses preuves et c pas pres de disparaitre

Reply

Marsh Posté le 02-07-2002 à 01:28:24    

localhost a écrit a écrit :

monokrome a écrit
les .o c les fichiers objets, dans ton cas tu as pas le temps de les voir, ils sont linké directos, et hop binaire..
 
sous Linux y a pas de .exe; c juste un attribut, par ex pour rendre un script executable tu fait chmod +x fichier et voila, fichier est considéré comme un binaire a part entiere..
 
la PATH c un ensemble de repertoire (genre

Code :
  1. /bin:/usr/bin:/usr/local/bin,

etc)
 
et en effet les rep/sous-rep /bin /sbin contiennent tous les binaires, c beaucoup plus logique comme raisonnement que des rep ertoires disparates (program files et autres conneries)
 
pour enrichir ton PATH, si tu utilises bash ( 98 % de chance) tapes :
 

Code :
  1. PATH=$PATH:/home/tonnom/bin


 
(je te conseille de faire un rep bin et un lib dans ton home, c plus pratique quand tu prog :)
 
edit: merd j'arrive po avec ces balises, remplace :/ par : / (sans espace)
 
 
------
 
cai plus lisible ;)




 
merci  ;)

Code :
  1. test :/

Reply

Marsh Posté le 02-07-2002 à 01:29:26    

Juste comme ça, l'est ou $PATH ?
 
Ca se présente sous fichier texte ?


---------------
#!/usr/bin/girl
Reply

Marsh Posté le 02-07-2002 à 01:33:57    

non, c une variable d'environnement définit au démarrage du systeme dans les fichiers de /etc/rc.d/xxx et pour chaque user dans ses fichiers rc perso (genre .bashrc, .profile, etc).
 
pour voir a quoi ca ressemble :
 

Code :
  1. echo $PATH


 
et comme tu es curieux et que tu te demande si y en a d'autres, oui, tu peut les voir comme ca :
 

Code :
  1. set|more


 
 
edit : y a aussi d'autre fichiers, comme le /etc/profile, ca dépends des distri et des OS (c sensiblement différent sur les *BSD)


Message édité par monokrome le 02-07-2002 à 01:35:14
Reply

Marsh Posté le 02-07-2002 à 09:12:02    

Mexx20 a écrit a écrit :

Alors, autre question : J'aimerai utiliser le fichier "conio.h" qui était par défaut sur mon compilateur BCC sous windows. Où dois je le placer pour qu'il sois avec les autre fichier genre "iostream.h", ... ??


conio ne marche pas sous unix, c'est un truc du DOS.
Il faut installer ncurses-dev, et regarder dans la doc comment convertir un programme utilisant conio à ncurses, c'est assez facile (et ncurses est beauuuuucoup plus puissant).


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 05-07-2002 à 03:04:21    

Au fait j'utilise les fonction "getch()" et "clrscr()" de "conio.h". La première permet de rentrer un caractère sans devoir appuyer sur "entrée". Ce qui permet de faire des pauses ds les prog par exemple. La deuxième efface ce qui se trouve à l'écran... Si tu pouvais me dire l'équivalent ds une bib propre à linux ça serait super  :wahoo:

Reply

Marsh Posté le 05-07-2002 à 10:28:39    

Mexx20 a écrit a écrit :

Au fait j'utilise les fonction "getch()" et "clrscr()" de "conio.h". La première permet de rentrer un caractère sans devoir appuyer sur "entrée". Ce qui permet de faire des pauses ds les prog par exemple. La deuxième efface ce qui se trouve à l'écran... Si tu pouvais me dire l'équivalent ds une bib propre à linux ça serait super  :wahoo:


L'équivalent de getch dans ncurses, c'est getch (regarde dans la page de manuel pour le configurer comme tu veux, il a plein de modes de fonctionnement différents).
Pour effacer l'écran, c'est clear.
 
Tout est très bien expliqué dans ncurses(3). En particulier, pour d'évidentes raisons d'optimisations, tu dessines plein de trucs, et il faut faire un appel à refresh pour les afficher.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 23-12-2002 à 06:55:40    

>> JaJar : J'ai installé libncurses5-dev ... Dans mon programme
je fait "#include <curses.h>" comme indiqué dans le man (ncurses(3)) et j'appelle une fois la fonction clear() et à la compilation il y a cette erreur :
 
 


/tmp/ccOWAZUE.o: In function 'main':
/tmp/ccOWAZUE.o(text+0x7): undifined reference to 'clear'
collect 2: lod returned 1 exit status

 
 
Mon programme c'est tjours le même :
 


#include <stdlib.h>
#include <iostream.h>
#include <curses.h>
 
int main(){
 clear();
 cout<<"Hello World!!!"<<endl;
 return(EXIT_SUCCESS);
}
 


 
On dirait un problème de linkage mais je ne suis pas sur. Merci de ton aide. ;)


Message édité par mexx20 le 23-12-2002 à 06:56:55
Reply

Marsh Posté le 23-12-2002 à 09:18:07    

Il faut aussi que tu dises à gcc de faire un lien avec la bibliotheque ncurses ;)
 
dans ton cas, la compilation devient "g++ test.c -lncurses"

Reply

Marsh Posté le 23-12-2002 à 12:04:21    

iostream.h ca n'existe pas, les entetes standards du C++ n'ont pas d'extension. Il faut faire
 
#include <iostream>
 
Et EXIT_SUCESS/EXIT_FAILURE sont des constantes qui servent uniquement a la fonction exit() . Par exemple sous VMS, ce sont des chaines de caracteres, donc ta fonction main() qui renvoit un objet de type "int" n'appreciera pas du tout.
Contente-toi d'un
 
return 0;
 
Dernier truc : si ton code source est en c++, donne-lui l'extension .cpp
 
$ cat > yop.cpp

Code :
  1. #include <iostream>
  2. int main(void)
  3. {
  4.    std::cout << "yop" << std::endl;
  5.    return 0;
  6. }


 
$ make yop
 
$ ./yop
 

Reply

Marsh Posté le 23-12-2002 à 12:08:23    

Avec l'effacement de l'ecran :
 

Code :
  1. #include <iostream>
  2. #include <ncurses.h>
  3. int main(void)
  4. {
  5.    if (initscr() == NULL || clear() != OK) {
  6.         return 1;
  7.    }
  8.    std::cout << "yop" << std::endl;
  9.    return 0;
  10. }


 
Fous ca dans un fichier yop.cpp, puis :
 


$ env LDFLAGS=-lncurses make yop
$ ./yop


Message édité par axey le 23-12-2002 à 12:10:20
Reply

Marsh Posté le 23-12-2002 à 21:51:24    

merci!! ;-)
 
ca fonctionne sauf que la console devient folle après l'execution
du programme (le petit que tu donne exemple aussi) et cela en X
et en normal ... En fait tout est décalé et je ne vois plus ce que je tape ...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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