Я написал программу на C ++ и выполнил ее для создания файла .out. Однако всякий раз, когда я пытаюсь запустить его, я получаю разрешение на отказ. Я читал, что мы можем использовать sudo, но не могу заставить его работать. Я использую что-то вроде sudo "./a.out", но это тоже не работает.
Редактировать :
Вот сообщение, которое я получаю, когда пытаюсь «./a.out».
bash: ./a.out: Permission denied
command-line
executable
c++
compiler
Шамим Хафиз
источник
источник
Ответы:
Обычно
g++
дает созданному файлу права на выполнение. Если вы не передадите-o
опцию, файл будет названa.out
.Две возможные причины, по которым в вашем файле не установлен бит выполнения, со своими решениями:
Значение umask установлено на значение, подобное 0133, тем самым предотвращая установку бита выполнения. Решение: установите разрешения явно:
fmask=0022
илиumask=0022
(опускаяfmask
). Смотрите варианты монтирования для жира раздела на странице руководства монтировки для более подробной информации.Для сценариев bash, у которых не установлен бит исполнения, вы можете запустить
bash file.sh
. Такая функция существует для всех файлов с исполняемым содержимым (скомпилированные файлы и файлы с#!/path/to/interpreter
набором строк Шебанга ). Чтобы выполнить файлы без установленного бита выполнения, используйте специальный файл/lib/ld-linux.so.2
(или/lib/ld-linux-x86-64.so.2
для 64-битных приложений) для запуска такой программы:источник
C:\Ubuntu
была создана). Это не должно быть проблемой, если вы не помещаете файлы в «C:», а не устанавливаете Ubuntu. Если вы не используете Windows или у вас достаточно места на диске, я предлагаю установить Ubuntu на выделенный раздел. И опять же , NTFS / FAT32 не поддерживает разрешения Linux, так что вы можете работатьsudo chown user file
,chmod 755 file
он не будет работать. Вам действительно нужна файловая система EXT для этого.~
, я создаю~/projects
и помещаю в него все свои проекты, вы можете сделать то же самое..out - необычное расширение. Обычно это обычно означает файл «трассировки».
Проверьте синтаксис, который вы используете для компиляции
например
или, может быть
Вы можете проверить, установлен ли исполняемый бит в файле
или вы можете просто заставить исполняемый бит
тогда вы можете запустить свой файл
или просто
Возможно, вам также следует проверить, что выходной файл записан правильно в виде двоичного файла.
т.е.
Это сообщит, в каком формате находится файл - либо скрипт, либо двоичный файл.
Вам редко нужно запускать с правами root, если вы не ограничены, кто должен иметь возможность запускать исполняемый файл.
Если вы скомпилировали от имени пользователя root (например, sudo make), или у вас есть Makefile, который установил исполняемый файл от имени пользователя root, тогда я могу предложить вам восстановить разрешение, когда пользователь вошел
т.е.
т.е. замените "Фред" на ваш идентификатор пользователя.
источник
просто скопируйте папку в вашу домашнюю папку, и она будет работать. Вы, вероятно, пытаетесь запустить его на внешнем диске или что-то.
источник
Обходной путь для FAT-файловых систем в первом ответе
«Это может иметь место, если вы помещаете файлы на флэш-накопитель в формате FAT32. Решение: (...) смонтируйте диск с помощью fmask = 0022 или umask = 0022 (без fmask)».
обычно не работает - по умолчанию umask в большинстве случаев равен 0022, так что это ничего не меняет.
Однако по умолчанию другой параметр монтирования фактически запрещает выполнение двоичных файлов, особенно если файловая система FAT смонтирована как пользователь без полномочий root:
noexec
Так что просто смонтируйте диски в формате FAT с помощью опции
exec
:(обычно это нужно делать с правами root, отсюда и «sudo»), и вы сможете запускать двоичные файлы прямо оттуда.
источник
Держу пари, что ваша программа не имеет функции main (), как если бы она была, ваш компилятор сделал бы исполняемый файл .out. Прямо сейчас это просто объектный файл, полный кода, но нет точки входа. main () - это имя специальной функции в C и C ++, которое указывает компилятору создавать программу, а не просто объектные файлы, которые могут быть связаны с программой или библиотекой.
Мне было бы интересно узнать, какую командную строку вы использовали для создания этого файла, поскольку g ++ компилятор GNU GCC g ++ не позволит мне создать простую программу без основной функции:
Однако, если я сделаю изменение 'void no_main' на 'int main', это сработает:
источник