Я только что перешел с Windows на Ubuntu 11.10.
Я написал следующий код на C с помощью текстового редактора и сохранил его как HelloWorld.c в Documents.
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
И я запустил Терминал и ввел следующие команды:
cd Documents
gcc HelloWorld.c
Файл с именем a.out, который после некоторого поиска в Google является исполняемым файлом. Я ввел эту команду:
a.out
Но я получаю
a.out: command not found
Какой шаг я сделал неправильно?
command-line
gcc
c
yihangho
источник
источник
sudo chmod 777 a.out
+x
для вас; вам не нуженchmod
исполняемый файл, созданный компилятором. Единственная распространенная ситуация, когдаgcc
не удается сделать его исполняемым, - это если он создает файл в файловой системе, которая не поддерживает или не разрешает его (в этом случаеchmod
сразу же после этого может произойти сбой). Кроме того,777
следует избегать. Нет необходимости делать его читаемым, записываемым и исполняемым всеми пользователями; если это было необходимо для запускаchmod
, тоchmod +x a.out
будет вполне достаточно.Ответы:
Поскольку вы запускаете исполняемый файл в текущем рабочем каталоге, вы должны поставить перед ним префикс
./
. Так что для вашей программы запустите его как./a.out
.объяснение
Терминал ищет исполняемые файлы в
$PATH
. Это Unix переменная окружения , которые перечислены каталоги , содержащие системные файлы (такие какls
,echo
илиgcc
). Если вы вызываете исполняемый файл, который не находится в$PATH
каталоге (например,a.out
), вам необходимо указать его абсолютный путь в файловой системе.В терминале
.
есть синоним текущего рабочего каталога, таким образом./a.out
. Вы могли бы одинаково хорошо позвонить/home/yihang/Documents/a.out
.источник
chmod u+x a.out
разрешить системе выполнить его.Когда вы запускаете команды в Linux, он ищет все каталоги, перечисленные в
PATH
переменной среды, и если он не находит там команду, вы получаете сообщение, которое вы видели.Обычно это выглядит так:
Это означает, что он будет смотреть первым
/usr/local/bin
. Если он не найдет его там, он будет смотреть в/usr/bin
и так далее.На самом деле, это очень похоже на DOS / Windows: есть переменная
%PATH%
которая делает то же самое.Разница в том , что, на Windows, текущий каталог также искали. Unix считает это плохим, потому что локальный файл (например, вредоносное ПО) может случайно переопределить важные системные программы.
Если вы предпочитаете это, вы можете заставить Linux работать таким же образом, добавив
.
путь:(Это говорит
PATH
о.:
плюс к существующему содержимому$PATH
.)В конечном итоге это выглядит примерно так (на вашей машине это может отличаться):
Если вы не хотите этого делать, вы можете просто запустить каждую программу, указав каталог явно:
или
источник
.
вPATH
, всегда добавляйте его последним.По сути, a.out создается по умолчанию, потому что вы не указали имя для исполняемого файла. Попробуйте это вместо этого:
После того, как вы это сделаете, вы сможете вызвать его (как предложил Сунил), предварительно указав «HelloWorld» с помощью косой черты (./):
Вот ссылка на статью, в которой немного объясняется, почему создается a.out: Написание и компиляция программ на C в Linux .
источник