Comment compiler et EXECUTER un "Hello World!!!" ??? - Linux et OS Alternatifs
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.
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!
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 :
|
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 :
|
(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)
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
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
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 :
|
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 :
|
(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 ;)
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
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 :
|
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
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
etc)
|
merci
Code :
|
Marsh Posté le 02-07-2002 à 01:29:26
Juste comme ça, l'est ou $PATH ?
Ca se présente sous fichier texte ?
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 :
|
et comme tu es curieux et que tu te demande si y en a d'autres, oui, tu peut les voir comme ca :
Code :
|
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)
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).
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
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.
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 :
|
Mon programme c'est tjours le même :
|
On dirait un problème de linkage mais je ne suis pas sur. Merci de ton aide.
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"
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 :
|
$ make yop
$ ./yop
Marsh Posté le 23-12-2002 à 12:08:23
Avec l'effacement de l'ecran :
Code :
|
Fous ca dans un fichier yop.cpp, puis :
|
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 ...
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.