无法执行 .out 文件,权限被拒绝

Sha*_*fiz 12 command-line executable c++ compiler

我编写了一个 C++ 程序并编译它以生成一个.out 文件。但是,每当我尝试运行它时,都会收到 Permission Denied。我读到我们可以使用 sudo,但我无法让它正常工作。我使用类似sudo "./a.out" 的东西,但这也不起作用。

编辑

这是我尝试“./a.out”时得到的消息。

bash: ./a.out: Permission denied
Run Code Online (Sandbox Code Playgroud)

Lek*_*eyn 20

通常,g++赋予创建的文件执行权限。如果您不传递该-o选项,该文件将被命名为a.out.

您的文件没有设置执行位的两个可能原因及其解决方案:

  1. umask值被设置为一个值等0133,从而防止执行位被集。解决方案:明确设置权限:

    chmod 755 a.out
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您正在使用的文件系统不支持 Linux 权限。如果您将文件放在 FAT32 格式的闪存驱动器上,则可能就是这种情况。解决方案:备份文件并将其格式化为 ext2 或使用fmask=0022umask=0022(省略fmask)挂载驱动器。有关更多详细信息,请参阅mount手册页上的fat部分的Mount 选项

对于没有设置执行位的 bash 脚本,您可以运行bash file.sh. 所有具有可执行内容的文件(编译文件和具有 shebang 行#!/path/to/interpreter集的文件)都存在这样的功能。要在没有设置执行位的情况下执行文件,请使用特殊文件/lib/ld-linux.so.2(或/lib/ld-linux-x86-64.so.2对于 64 位应用程序)来运行这样的程序:

/lib/ld-linux-x86-64.so.2 a.out
Run Code Online (Sandbox Code Playgroud)

  • 同样的故事,Windows 文件系统都不支持 Linux 文件权限。您应该将文件放在格式化为 EXT 的文件系统上。 (3认同)
  • 没错,就留在`~`中,我创建`~/projects`并将我所有的项目都放在里面,你可以做同样的事情。 (3认同)

fos*_*dom 5

.out 是一个不寻常的扩展名。通常这通常表示“跟踪输出”文件。

检查您用于编译的语法

例如

gcc myfile.c /usr/lib/libsomelibrary.a -o outputfilename
Run Code Online (Sandbox Code Playgroud)

或者可能

g++ myfile.cpp -lm -o outputfilename
Run Code Online (Sandbox Code Playgroud)

您应该检查文件上是否设置了可执行位

ls -l a.out
Run Code Online (Sandbox Code Playgroud)

或者你可以强制执行可执行位

chmod +x a.out
Run Code Online (Sandbox Code Playgroud)

然后你可以运行你的文件

./a.out
Run Code Online (Sandbox Code Playgroud)

或者干脆

a.out
Run Code Online (Sandbox Code Playgroud)

您也许还应该检查输出文件是否已正确写入为二进制文件

IE

file a.out
Run Code Online (Sandbox Code Playgroud)

这将报告文件的格式 - 脚本或二进制文件

您很少需要以 root 身份执行,除非您限制了谁应该能够运行可执行文件。

如果您以 root 身份编译(例如 sudo make),或者有一个以 root 身份安装可执行文件的 Makefile,那么我建议您在用户登录时重新获得权限

IE

sudo chown fred:fred a.out
Run Code Online (Sandbox Code Playgroud)

即用您的用户 ID 替换“fred”。


小智 5

只需将该文件夹复制到您的主文件夹即可。您可能正在尝试在外部驱动器或其他东西上运行它。