我编写了一个 C++ 程序并对其进行了编译以生成一个 .out 文件。但是,每当我尝试运行它时,都会出现权限被拒绝的情况。我读到我们可以使用 sudo,但我无法让它正常工作。我使用类似sudo“./a.out”但这也不起作用。
编辑:
这是我尝试“./a.out”时收到的消息。
bash: ./a.out: Permission denied
答案1
通常,g++
赋予创建的文件执行权限。如果不传递该-o
选项,则文件将被命名为a.out
。
您的文件未设置执行位可能有两个原因及其解决方案:
这umask 值设置为 0133 之类的值,从而阻止设置执行位。解决方案:明确设置权限:
chmod 755 a.out
- 您正在使用的文件系统不支持 Linux 权限。如果您将文件放在 FAT32 格式的闪存驱动器上,则可能出现这种情况。解决方案:备份文件并将其格式化为 ext2,或者使用或
fmask=0022
(umask=0022
省略fmask
)安装驱动器。请参阅脂肪装载选项部分安装手册页更多细节。
对于未设置执行位的 bash 脚本,您可以运行bash file.sh
。此功能适用于所有具有可执行内容的文件(编译文件和#!/path/to/interpreter
设置了 shebang 行的文件)。要执行未设置执行位的文件,请使用特殊文件/lib/ld-linux.so.2
(或/lib/ld-linux-x86-64.so.2
64 位应用程序)运行此类程序:
/lib/ld-linux-x86-64.so.2 a.out
答案2
.out 是一个不常见的扩展名。通常,它表示“跟踪输出”文件。
检查你用于编译的语法
例如
gcc myfile.c /usr/lib/libsomelibrary.a -o outputfilename
或者可能
g++ myfile.cpp -lm -o outputfilename
您可以检查文件上是否设置了可执行位
ls -l a.out
或者你可以强制执行位
chmod +x a.out
然后你可以运行你的文件
./a.out
或者简单地
a.out
您还应该检查输出文件是否已正确写入二进制文件
IE
file a.out
这将报告文件的格式 - 脚本或二进制
除非您限制了谁可以运行可执行文件,否则您很少需要以 root 身份执行。
如果你已经以 root 身份进行编译(例如 sudo make),或者有一个以 root 身份安装可执行文件的 Makefile,那么我建议你以用户登录的身份重新获得权限
IE
sudo chown fred:fred a.out
即用你的用户 ID 替换“fred”。
答案3
只需将文件夹复制到您的主文件夹即可。您可能想在外部驱动器或其他地方运行它。
答案4
在 Zorin/Ubuntu 上我得到了这个..
$ g++ --std=c++17 -Werror -Wall main.cpp -o main.out
$ sudo chmod +x main.out
$ ./main.out
bash:./main.out:权限被拒绝
我必须将我的整个 REPO 从USB驱动器到 SSD。
在 USB 上,我无法将其设为可执行文件。现在无需 chmod 即可运行。