Napisałem program w C ++ i zastosowałem go do utworzenia pliku .out. Jednak za każdym razem, gdy próbuję go uruchomić, otrzymuję odmowę zezwolenia. Czytałem, że możemy używać sudo, ale nie do końca mogę go uruchomić. Używam czegoś takiego jak sudo „./a.out”, ale to też nie działa.
Edytuj :
Oto wiadomość, którą otrzymuję, gdy próbuję „./a.out”.
bash: ./a.out: Permission denied
command-line
executable
c++
compiler
Shamim Hafiz
źródło
źródło
Odpowiedzi:
Zwykle
g++
daje utworzone uprawnienia do wykonywania pliku. Jeśli nie przejdziesz-o
opcji, plik zostanie nazwanya.out
.Dwa możliwe powody, dla których plik nie ma ustawionego bitu wykonania, wraz z ich rozwiązaniami:
Wartość umask jest ustawiona na wartość taką jak 0133, co zapobiega ustawianiu bitu wykonania. Rozwiązanie: jawnie ustaw uprawnienia:
fmask=0022
lubumask=0022
(pomijającfmask
). Zobacz sekcję Opcje montażu tłuszczu na stronie instrukcji montażu, aby uzyskać więcej informacji.W przypadku skryptów bash, które nie mają ustawionego bitu wykonania, możesz uruchomić
bash file.sh
. Taka funkcja istnieje dla wszystkich plików z zawartością wykonywalną (pliki skompilowane i pliki z#!/path/to/interpreter
zestawem linii shebang ). Aby wykonać pliki bez zestawu bitów wykonania, użyj specjalnego pliku/lib/ld-linux.so.2
(lub/lib/ld-linux-x86-64.so.2
aplikacji 64-bitowych), aby uruchomić taki program:źródło
C:\Ubuntu
został stworzony). Nie powinno to stanowić problemu, chyba że umieścisz pliki na „C:”, a nie na instalacji Ubuntu. Jeśli nie korzystasz z systemu Windows lub masz dużo miejsca na dysku, sugeruję zainstalowanie Ubuntu na dedykowanej partycji. I znowu, NTFS / FAT32 nie obsługuje uprawnienia Linux, więc można uruchomićsudo chown user file
,chmod 755 file
to nie będzie działać. Naprawdę potrzebujesz do tego systemu plików EXT.~
, tworzę~/projects
i wkładam w to wszystkie moje projekty, możesz zrobić to samo..out jest nietypowym rozszerzeniem. Zwykle oznaczałoby to plik „śledzenia wyjścia”.
Sprawdź swoją składnię, której używasz do kompilacji
na przykład
albo może
Możesz sprawdzić, czy bit wykonywalny jest ustawiony w pliku
lub możesz po prostu wymusić bit wykonywalny
wtedy możesz uruchomić swój plik
lub po prostu
Być może powinieneś również sprawdzić, czy plik wyjściowy został poprawnie zapisany jako plik binarny
to znaczy
Spowoduje to zgłoszenie formatu pliku - skryptu lub pliku binarnego
Rzadko musisz uruchamiać się jako root, chyba że masz ograniczone możliwości uruchomienia pliku wykonywalnego.
Jeśli skompilowałeś jako root (np. Sudo make) lub masz plik Makefile, który zainstalował plik wykonywalny jako root, to czy mogę zasugerować, abyś odzyskał uprawnienia po zalogowaniu się użytkownika
to znaczy
tzn. zamień „fred” na identyfikator użytkownika.
źródło
po prostu skopiuj folder do folderu domowego i będzie działać. Prawdopodobnie próbujesz uruchomić go na zewnętrznym dysku lub coś takiego.
źródło
Obejście dla systemów plików FAT w pierwszej odpowiedzi
„Może tak być w przypadku umieszczania plików na dysku flash sformatowanym w systemie FAT32. Rozwiązanie: (...) zamontuj dysk za pomocą fmask = 0022 lub umask = 0022 (pomijając fmask).”
normalnie nie działa - domyślnie i tak umask to w większości 0022, więc nic to nie zmienia.
Jednak inny domyślny parametr montowania skutecznie uniemożliwia wykonywanie plików binarnych, szczególnie jeśli system plików FAT jest zamontowany jako użytkownik inny niż root:
noexec
Po prostu zamontuj dyski w formacie FAT z opcją
exec
:(zwykle należy to zrobić jako root, stąd „sudo”) i powinieneś być w stanie wykonywać pliki binarne bezpośrednio z tego miejsca.
źródło
Założę się, że twój program nie ma funkcji 'main ()', tak jakby to zrobił, twój kompilator spowodowałby, że a.out jest wykonywalny. W tej chwili jest to po prostu plik obiektowy pełen kodu, ale nie ma punktu wejścia. main () jest specjalną nazwą funkcji w C i C ++, która mówi kompilatorowi, aby utworzył program, a nie tylko pliki obiektowe, które można połączyć z programem lub biblioteką.
Chciałbym wiedzieć, jakiego wiersza poleceń użyłeś do utworzenia tego pliku, ponieważ kompilator c ++ GNU GCC, g ++, nie pozwoli mi stworzyć prostego programu bez głównej funkcji:
Jeśli jednak zmienię „void no_main” na „int main”, to zadziała:
źródło