Właśnie zmieniłem system Windows na Ubuntu 11.10.
Napisałem następujący kod w C za pomocą edytora tekstu i zapisałem go jako HelloWorld.c w Dokumentach.
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
Uruchomiłem Terminal i wprowadziłem następujące polecenia:
cd Documents
gcc HelloWorld.c
Plik o nazwie a.out, który po pewnym wyszukiwaniu w Google jest plikiem wykonywalnym. Wprowadziłem to polecenie:
a.out
Ale rozumiem
a.out: command not found
Który krok zrobiłem źle?
command-line
gcc
c
yihangho
źródło
źródło
sudo chmod 777 a.out
+x
dla Ciebie; nie potrzebujeszchmod
pliku wykonywalnego generowanego przez kompilator. Jedyną częstą sytuacją, w którejgcc
nie sprawia, że jest wykonywalny, jest tworzenie pliku w systemie plików, który go nie obsługuje lub na to nie pozwala (w takim przypadkuchmod
natychmiast też się nie powiedzie). Ponadto,777
należy unikać. Nie ma potrzeby, aby był czytelny, zapisywalny i wykonywalny przez wszystkich użytkowników; jeśli to było konieczne do uruchomieniachmod
, wtedychmod +x a.out
byłoby wystarczające.Odpowiedzi:
Ponieważ używasz pliku wykonywalnego w bieżącym katalogu roboczym, powinieneś go poprzedzić
./
. Więc dla swojego programu uruchom go jako./a.out
.Wyjaśnienie
Terminal szuka plików wykonywalnych w
$PATH
. To jest Unix zmienna , która wymienia katalogi zawierające binaria systemowe (takie jakls
,echo
lubgcc
). Jeśli wywołasz plik wykonywalny, który nie znajduje się w$PATH
katalogu (np.a.out
), Musisz wskazać jego bezwzględną ścieżkę w systemie plików.W terminalu
.
znajduje się zatem synonim bieżącego katalogu roboczego./a.out
. Równie dobrze możesz zadzwonić/home/yihang/Documents/a.out
.źródło
chmod u+x a.out
zezwolenie systemowi na wykonanie tego.Po uruchomieniu poleceń w systemie Linux przeszukuje wszystkie katalogi wymienione w
PATH
zmiennej środowiskowej, a jeśli nie znajdzie tam polecenia, pojawia się komunikat, który widziałeś.Zazwyczaj wygląda to tak:
Oznacza to, że najpierw zajrzy
/usr/local/bin
. Jeśli go tam nie znajdzie, zajrzy/usr/bin
i tak dalej.W rzeczywistości jest to bardzo podobne w systemie DOS / Windows: istnieje tak zwana zmienna,
%PATH%
która robi dokładnie to samo.Różnicą jest to, że w systemie Windows, bieżący katalog jest również przeszukane. Unix uważa to za złe, ponieważ plik lokalny (np. Złośliwe oprogramowanie) może przypadkowo zastąpić ważne programy systemowe.
Jeśli jednak wolisz, możesz sprawić, aby Linux działał w ten sam sposób, dodając
.
do ścieżki:(Oznacza to, że ustawiono
PATH
na.:
plus istniejącą zawartość$PATH
.)Wygląda to mniej więcej tak (na twoim komputerze może być inaczej):
Jeśli nie chcesz tego robić, możesz po prostu uruchomić każdy program, podając katalog jawnie:
lub
źródło
.
sięPATH
, zawsze dodać, że ostatni.Zasadniczo a.out jest tworzony domyślnie, ponieważ nie określono nazwy pliku wykonywalnego. Spróbuj zamiast tego:
Gdy to zrobisz, powinieneś być w stanie wywołać go (zgodnie z sugestią Sunila) poprzedzając „HelloWorld” kropką (./):
Oto link do artykułu, który wyjaśnia trochę, dlaczego powstaje a.out: Pisanie i kompilowanie programów C w systemie Linux .
źródło