Saya telah menulis program C ++ dan memenuhinya untuk menghasilkan file a.out. Namun, setiap kali saya mencoba menjalankannya, saya mendapatkan Izin yang Ditolak. Saya membaca bahwa kita dapat menggunakan sudo, tetapi saya tidak bisa membuatnya bekerja. Saya menggunakan sesuatu seperti, sudo "./a.out" tapi itu juga tidak berhasil.
Edit :
Ini pesan yang saya dapat ketika saya mencoba "./a.out".
bash: ./a.out: Permission denied
command-line
executable
c++
compiler
Shamim Hafiz
sumber
sumber
Jawaban:
Biasanya,
g++
memberikan file yang dibuat mengeksekusi izin. Jika Anda tidak lulus-o
opsi, file akan dinamaia.out
.Dua kemungkinan alasan mengapa file Anda tidak memiliki bit eksekusi, dengan solusi mereka:
Nilai umask diatur ke nilai seperti 0133, sehingga mencegah bit eksekusi dari yang ditetapkan. Solusi: atur izin secara eksplisit:
fmask=0022
atauumask=0022
(menghilangkanfmask
). Lihat opsi Mount untuk bagian lemak di halaman manual mount untuk detail lebih lanjut.Untuk skrip bash yang tidak memiliki set bit eksekusi, Anda bisa menjalankan
bash file.sh
. Fitur seperti itu ada untuk semua file dengan konten yang dapat dieksekusi (file yang dikompilasi dan file dengan#!/path/to/interpreter
set baris shebang ). Untuk mengeksekusi file tanpa set bit eksekusi, gunakan file khusus/lib/ld-linux.so.2
(atau/lib/ld-linux-x86-64.so.2
untuk aplikasi 64-bit) untuk menjalankan program seperti itu:sumber
C:\Ubuntu
telah dibuat). Ini seharusnya tidak menjadi masalah kecuali Anda meletakkan file pada "C:" dan bukan instalasi Ubuntu Anda. Jika Anda tidak menggunakan Windows, atau memiliki banyak ruang disk, saya sarankan menginstal Ubuntu pada partisi khusus. Dan lagi, NTFS / FAT32 TIDAK mendukung perizinan Linux, sehingga Anda dapat menjalankansudo chown user file
,chmod 755 file
itu tidak akan bekerja. Anda benar-benar membutuhkan sistem file EXT untuk itu.~
, saya membuat~/projects
dan meletakkan semua proyek saya di dalamnya, Anda bisa melakukan hal yang sama..out adalah ekstensi yang tidak biasa. Biasanya ini biasanya menandakan file "jejak keluaran".
Periksa sintaks yang Anda gunakan untuk kompilasi
misalnya
atau mungkin
Anda harus memeriksa untuk melihat apakah bit yang dapat dieksekusi diatur pada file
atau Anda bisa memaksa bit yang dapat dieksekusi
maka Anda dapat menjalankan file Anda
atau sederhana
Anda mungkin juga harus memeriksa apakah file output telah ditulis dengan benar sebagai biner
yaitu
Ini akan melaporkan format file itu - skrip atau biner
Anda jarang perlu mengeksekusi sebagai root kecuali Anda telah membatasi siapa yang harus dapat menjalankan executable.
Jika Anda telah dikompilasi sebagai root (misalnya sudo make), atau memiliki Makefile yang menginstal executable sebagai root maka dapatkah saya menyarankan Anda mendapatkan kembali izin sebagai pengguna login
yaitu
yaitu ganti "fred" dengan id pengguna Anda.
sumber
cukup salin folder ke folder rumah Anda dan itu akan berfungsi. Anda mungkin mencoba menjalankannya di drive eksternal atau sesuatu.
sumber
Solusi untuk sistem file FAT dalam jawaban pertama
"Ini bisa terjadi jika Anda meletakkan file pada flash drive yang diformat FAT32. Solusi: (...) pasang drive dengan fmask = 0022 atau umask = 0022 (menghilangkan fmask)."
biasanya tidak berfungsi - default untuk umask sebagian besar adalah 0022, jadi ini tidak mengubah apa pun.
Default mount parameter lainnya, bagaimanapun, secara efektif melarang eksekusi binari, terutama jika sistem file FAT di-mount sebagai non-root-user:
noexec
Jadi cukup pasang drive yang diformat FAT dengan opsi
exec
seperti ini:(ini biasanya harus dilakukan sebagai root, maka "sudo") dan Anda harus dapat mengeksekusi binari langsung dari sana.
sumber
Saya berani bertaruh bahwa program Anda tidak memiliki fungsi 'main ()', seolah-olah itu benar, kompiler Anda akan membuat a.out dapat dieksekusi. Sekarang ini hanya file objek yang penuh kode, tetapi tidak ada titik masuk. main () adalah nama fungsi khusus dalam C dan C ++ yang memberitahu kompiler untuk membuat program, bukan hanya file objek yang dapat ditautkan ke program atau pustaka.
Saya tertarik untuk mengetahui baris perintah apa yang Anda gunakan untuk menghasilkan file ini, karena kompiler c ++ GNU GCC, g ++, tidak akan membiarkan saya membuat program sederhana tanpa fungsi utama:
Namun jika saya melakukan perubahan 'void no_main' menjadi 'int main' itu berfungsi:
sumber