Đang cố gắng thực thi 'a.out' trả về -bash: a.out: không tìm thấy lệnh.


7

Tôi đã viết một chương trình C đơn giản trên một máy tính Linux khác. Tôi sẽ biên dịch nó bằng cách sử dụng

gcc guess.c

Điều đó sẽ xuất ra một a.outtập tin. Sau đó tôi chỉ cần gõ lệnh a.outvà chương trình C của tôi sẽ chạy.

Tôi đã cố chạy chương trình C tương tự trên Pi của tôi. Nó biên dịch tốt và xuất ra một a.outtập tin. Mặc dù khi tôi cố chạy lệnh "a.out", tôi gặp lỗi:

-bash: a.out: lệnh không tìm thấy.

Có ai biết làm thế nào để nhận được a.outhỗ trợ làm việc trên Pi không?


2
Tôi cũng sẽ thêm cờ "-Wall" vào lệnh gcc của bạn, để hiển thị tất cả các thông báo cảnh báo.
HectorLector

Điều này có thể được coi là liên quan đến PI vì OP đã quan sát hành vi khác nhau trên PI của họ so với trải nghiệm không PI trước đây. Cấp, câu trả lời cho câu hỏi là một câu trả lời UNIX / Linux thuần túy, nhưng nhiều câu hỏi / vấn đề PI có liên quan đến UNIX / Linux.
HeatfanJohn

2
"Về cơ bản, nếu bạn thắc mắc là về Raspberry Pi hoặc về điều gì đó xảy ra trên Raspberry Pi thì bạn đang ở đúng nơi." Trích dẫn trực tiếp từ trung tâm trợ giúp như những gì về chủ đề.
Morgan Kenyon

2
@MorganK Không thể tranh cãi. Nhưng chúng tôi cảm thấy rằng hiện tại nó hướng nhiều hơn đến việc sử dụng bash, và do đó là một câu hỏi chung của Linux, vì vấn đề của bạn sẽ xảy ra trên bất kỳ hệ thống Linux nào, thay vì chỉ trên Raspberry Pi. Vui lòng đến với Raspberry Pi Chat nếu bạn muốn cá dĩa hơn nữa!
Jivings

@MorganK Tôi không giận, nhưng lý do gì để bạn chấp nhận câu trả lời bạn đã làm cho tôi? Bạn hoàn toàn ổn, tôi chỉ tự hỏi làm thế nào để cải thiện câu trả lời trong tương lai để chúng được chấp nhận.
syb0rg

Câu trả lời:


15

bạn nên gõ:

./a.out

nếu tập tin của bạn nằm trong thư mục hiện tại

Ngoài ra, bạn có thể kiểm tra xem bit thực thi có được đặt với

ls -al a.out

và nếu không, hãy đặt nó bằng

chmod +x a.out

tuy nhiên, hầu hết các trình biên dịch sẽ thiết lập bit thực thi cho bạn một cách tự động.


Cũng đáng để đề cập rằng bạn không thể thực thi nhị phân nếu nhị phân không được biên dịch cho nền tảng cụ thể (nhánh).
ortang

Lệnh tệp sẽ báo cáo chi tiết về tệp thực thi, bao gồm ARM so với x86.
Nông dân Chad

15

Bạn cần đặt ./phía trước a.outđể thực hiện điều đó:

Khi bạn nhập tên của một chương trình, chẳng hạn như a.outhệ thống sẽ tìm tệp trong PATH của bạn. Trên hệ thống của tôi, PATH được đặt thành

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Có lẽ bạn cũng tương tự. Để kiểm tra, nhập echo $PATHvào một thiết bị đầu cuối.

Hệ thống xem qua các thư mục này theo thứ tự cho trước và nếu không thể tìm thấy chương trình sẽ tạo ra command not foundlỗi.

Chuẩn bị lệnh với ./hiệu quả là "hãy quên PATH, tôi muốn bạn chỉ nhìn trong thư mục hiện tại".

Tương tự, bạn có thể yêu cầu hệ thống chỉ nhìn vào một vị trí cụ thể khác bằng cách thêm lệnh bằng một đường dẫn tương đối hoặc tuyệt đối, chẳng hạn như:

./Debug/hello: "tìm kiếm hellotrong thư mục con Debug của thư mục hiện tại của tôi."

hoặc /bin/ls: "tìm lstrong thư mục /bin"

Theo mặc định, thư mục hiện tại không nằm trong đường dẫn vì nó được coi là rủi ro bảo mật. Xem tại sao là. không theo đường dẫn theo mặc định? trên Superuser tại sao.

Có thể thêm thư mục hiện tại vào PATH của bạn, nhưng vì những lý do được đưa ra trong câu hỏi được liên kết, tôi không khuyến nghị.

Tôi không chắc tại sao câu trả lời nói không thay đổi PATH của bạn, vì câu trả lời trên SuperUser nói rằng đây là "biện pháp chống vi-rút rất khập khiễng và vô dụng, và không có gì ngăn bạn tự thêm dấu chấm vào đường dẫn."

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.