Saya baru saja beralih dari Windows ke Ubuntu 11.10.
Saya menulis kode berikut dalam C dengan editor teks dan menyimpannya sebagai HelloWorld.c di Dokumen.
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
Dan saya memulai Terminal dan memasukkan perintah berikut:
cd Documents
gcc HelloWorld.c
File bernama a.out, yang, setelah beberapa pencarian di Google, dapat dieksekusi. Saya memasukkan perintah ini:
a.out
Tapi saya mengerti
a.out: command not found
Langkah mana yang saya lakukan salah?
command-line
gcc
c
yihangho
sumber
sumber
sudo chmod 777 a.out
+x
untuk Anda; Anda tidak perluchmod
mengeksekusi yang dihasilkan oleh kompiler. Satu-satunya situasi umum di managcc
gagal untuk membuatnya dapat dieksekusi adalah jika itu membuat file dalam sistem file yang tidak mendukung atau mengizinkannya (dalam hal inichmod
segera setelah itu akan gagal juga). Juga,777
harus dihindari. Tidak perlu membuatnya dapat dibaca, ditulis, dan dieksekusi oleh semua pengguna; jika itu diperlukan untuk menjalankanchmod
, makachmod +x a.out
akan cukup.Jawaban:
Karena Anda menjalankan executable di direktori kerja saat ini, Anda harus mengawali dengan
./
. Jadi untuk program Anda jalankan sebagai./a.out
.Penjelasan
Terminal mencari executable di
$PATH
. Ini adalah Unix variabel lingkungan yang daftar direktori yang berisi sistem biner (sepertils
,echo
, ataugcc
). Jika Anda memanggil executable yang tidak ada dalam$PATH
direktori (sepertia.out
), Anda perlu menunjukkan path absolutnya dalam sistem file.Di terminal
.
adalah sinonim untuk direktori kerja saat ini, dengan demikian./a.out
. Anda juga bisa menelepon/home/yihang/Documents/a.out
.sumber
chmod u+x a.out
mengizinkan sistem untuk menjalankannya.Ketika Anda menjalankan perintah di Linux, ia akan mencari semua direktori yang tercantum dalam
PATH
variabel lingkungan, dan jika tidak menemukan perintah di sana, maka Anda mendapatkan pesan yang Anda lihat.Biasanya terlihat seperti ini:
Itu berarti akan terlihat pertama di
/usr/local/bin
. Jika tidak menemukannya di sana akan terlihat/usr/bin
, dan sebagainya.Sebenarnya, ini sangat mirip pada DOS / Windows: ada variabel yang disebut
%PATH%
yang melakukan hal yang persis sama.The perbedaan adalah bahwa, pada Windows, direktori saat ini juga dicari. Unix menganggap ini buruk karena file lokal (seperti malware) dapat menimpa program sistem penting secara tidak sengaja.
Jika Anda lebih suka itu, Anda bisa membuat Linux bekerja dengan cara yang sama dengan menambahkan
.
path:(Itu mengatakan set
PATH
ke.:
ditambah konten yang ada$PATH
.)Akhirnya terlihat seperti ini (mungkin berbeda pada mesin Anda):
Jika Anda lebih suka tidak melakukannya, Anda bisa menjalankan setiap program dengan menentukan direktori secara eksplisit:
atau
sumber
.
untukPATH
, selalu menambahkannya lalu.Pada dasarnya, a.out dibuat secara default karena Anda tidak menentukan nama untuk dieksekusi. Coba ini sebagai gantinya:
Setelah Anda melakukan itu, Anda harus dapat memohonnya dengan (seperti yang disarankan Sunil) dengan prefacing "HelloWorld" dengan dot-slash (./):
Berikut ini tautan ke artikel yang menjelaskan sedikit tentang mengapa a.out dibuat: Menulis dan Mengkompilasi Program C di Linux .
sumber