Je viens de passer de Windows à Ubuntu 11.10.
J'ai écrit le code suivant en C avec l'éditeur de texte et l'ai enregistré sous HelloWorld.c dans Documents.
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
Et j'ai démarré le terminal et saisis les commandes suivantes:
cd Documents
gcc HelloWorld.c
Un fichier appelé a.out, qui, après quelques recherches sur Google, est l'exécutable. J'ai entré cette commande:
a.out
Mais je reçois
a.out: command not found
Quelle étape ai-je mal fait?
command-line
gcc
c
yihangho
la source
la source
sudo chmod 777 a.out
+x
pour vous; vous n'avez pas besoin dechmod
l'exécutable produit par un compilateur. La seule situation courante oùgcc
ne parvient pas à le rendre exécutable est s'il crée le fichier dans un système de fichiers qui ne le prend pas en charge ou ne le permet pas (auquel cas,chmod
immédiatement après, échouerait également). Aussi,777
devrait être évité. Il n'est pas nécessaire de le rendre lisible, inscriptible et exécutable par tous les utilisateurs; si elle était nécessaire d'exécuterchmod
, alorschmod +x a.out
serait suffisant.Réponses:
Puisque vous exécutez un exécutable dans le répertoire de travail actuel, vous devez le préfixer avec
./
. Donc, pour votre programme, exécutez-le en tant que./a.out
.Explication
Le terminal recherche les exécutables dans
$PATH
. Ceci est un Unix variable d'environnement que les répertoires contenant des listes binaires du système ( par exemplels
,echo
ougcc
). Si vous appelez un exécutable qui ne se trouve pas dans un$PATH
répertoire (tel quea.out
), vous devez indiquer son chemin absolu dans le système de fichiers.Dans le terminal
.
est donc synonyme du répertoire de travail actuel./a.out
. Vous pourriez tout aussi bien appeler/home/yihang/Documents/a.out
.la source
chmod u+x a.out
autoriser le système à l'exécuter.Lorsque vous exécutez des commandes sous Linux, il recherche tous les répertoires répertoriés dans la
PATH
variable d'environnement, et s'il n'y trouve pas la commande, vous obtenez le message que vous avez vu.Cela ressemble généralement à ceci:
Cela signifie qu'il apparaîtra en premier
/usr/local/bin
. S'il ne le trouve pas, il le cherchera/usr/bin
, et ainsi de suite.En fait, c'est très similaire sous DOS / Windows: il y a une variable appelée
%PATH%
qui fait exactement la même chose.La différence est que, sous Windows, le répertoire actuel est également recherché. Unix considère cela comme mauvais car un fichier local (tel qu'un malware) peut remplacer accidentellement des programmes système importants.
Si vous préférez cela, vous pouvez faire fonctionner Linux de la même manière en ajoutant
.
au chemin:(Cela signifie que l'ensemble
PATH
doit.:
contenir le contenu existant de$PATH
.)Cela finit par ressembler à quelque chose comme ça (cela peut être différent sur votre machine):
Si vous préférez ne pas le faire, vous pouvez simplement exécuter chaque programme en spécifiant explicitement le répertoire:
ou
la source
.
àPATH
, ajoutez-le toujours en dernier.Essentiellement, a.out est créé par défaut car vous n'avez pas spécifié de nom pour l'exécutable. Essayez plutôt ceci:
Une fois que vous avez fait cela, vous devriez pouvoir l'invoquer en (comme l'a suggéré Sunil) en faisant précéder "HelloWorld" d'une barre oblique (./):
Voici un lien vers un article qui explique un peu pourquoi la création de a.out: Écriture et compilation de programmes C sous Linux .
la source