Моя программа не может быть запущена с помощью команды & ldquo; not found & rdquo; ошибка

Я только что перешел с 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

Какой шаг я сделал неправильно?

19
задан 7 March 2012 в 18:14

3 ответа

Когда вы запускаете команды в Linux, он ищет все каталоги, перечисленные в переменной среды PATH, и если он не находит там команду, вы получаете сообщение, которое вы видели.

Обычно это выглядит так:

PATH=/usr/local/bin:/usr/bin:/bin

Это означает, что он будет выглядеть первым в /usr/local/bin. Если он не найдет его там, он будет выглядеть в /usr/bin и т. Д.

На самом деле, это очень похоже на DOS / Windows: есть переменная %PATH%, которая делает то же самое.

Разница заключается в том, что в Windows текущий каталог также ищется. Unix считает это плохим, потому что локальный файл (например, вредоносное ПО) может случайно переопределить важные системные программы.

Однако, если вы предпочитаете это, вы можете заставить Linux работать таким же образом, добавив . к пути:

PATH=.:$PATH

(То есть установите PATH в .: плюс существующее содержимое из $PATH.)

В конечном итоге это выглядит примерно так (на вашей машине это может отличаться):

PATH=.:/usr/local/bin:/usr/bin:/bin

Если вы не хотите этого делать, вы можете просто Запустите каждую программу, указав каталог явно:

./myprog

или

/home/username/myprog
0
ответ дан 7 March 2012 в 18:14

По существу a.out создается по умолчанию, потому что Вы не указывали название исполняемого файла. Попробуйте это вместо этого:

gcc HelloWorld.c -o HelloWorld

После того как Вы делаете это, необходимо смочь вызвать его (как предложенный Sunil) снабжающий "HelloWorld" предисловием с точечной наклонной чертой (./):

./HelloWorld

Вот ссылка на статью, которая объясняет немного о том, почему a.out создается: Запись и Компиляция C Программы на Linux.

3
ответ дан 7 March 2012 в 18:14

Поскольку вы запускаете исполняемый файл в текущем рабочем каталоге, вы должны поставить перед ним префикс ./. Так что для вашей программы запустите ее как ./a.out.

Пояснение

Терминал ищет исполняемые файлы в $PATH. Это переменная среды Unix , в которой перечислены каталоги, содержащие системные двоичные файлы (такие как ls, echo или gcc). Если вы вызываете исполняемый файл , а не в каталоге $PATH (например, a.out), вам необходимо указать его абсолютный путь в файловой системе.

В терминале . есть синоним текущего рабочего каталога, таким образом ./a.out. С таким же успехом вы можете позвонить /home/yihang/Documents/a.out.

0
ответ дан 7 March 2012 в 18:14

Другие вопросы по тегам:

Похожие вопросы: