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.
您的文件没有设置执行位的两个可能原因及其解决方案:
的umask值被设置为一个值等0133,从而防止执行位被集。解决方案:明确设置权限:
chmod 755 a.out
Run Code Online (Sandbox Code Playgroud)fmask=0022或umask=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)
.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”。
| 归档时间: |
|
| 查看次数: |
88350 次 |
| 最近记录: |