Termux执行C++文件遇权限拒绝求助(Nexus7 Lineage OS)
解决Termux中执行C++程序权限拒绝的问题
兄弟,我之前在Termux里折腾C++程序的时候也碰到过一模一样的权限问题,给你几个实用的排查和解决步骤:
第一步:检查可执行文件的权限
首先最常见的原因是你编译出来的二进制文件没有可执行权限。你可以先在Termux里进入文件所在的目录,然后运行:
ls -l 你的程序文件名
比如你的程序叫main,就输入ls -l main。看输出里的权限列,比如如果是-rw-r--r--,说明没有可执行权限(缺了x标记)。这时候给文件加上可执行权限就行:
chmod +x 你的程序文件名
加完之后再用ls -l确认一下,权限变成-rwxr-xr-x就对了,这时候再试试执行./你的程序文件名。
第二步:如果加权限还是不行?检查文件所在目录
如果上面的步骤做完还是提示权限拒绝,那大概率是Android系统的安全限制在搞鬼:Termux允许你读写外部存储(比如/storage/emulated/0下的Drive下载文件夹),但Android默认禁止在外部存储目录里执行任何二进制文件——这是系统的安全规则,和Termux的存储权限没关系。
解决这个问题最简单的办法就是把你的C++文件和编译好的程序移到Termux自己的内部目录里,比如:
- 先创建一个专属的C++工作目录:
mkdir ~/cpp_workspace
- 把你的
.cpp、.h文件和编译好的程序移过去(假设你的文件存在/storage/emulated/0/Drive/C++目录下):
mv /storage/emulated/0/Drive/C++/*.cpp ~/cpp_workspace/ mv /storage/emulated/0/Drive/C++/*.h ~/cpp_workspace/ mv /storage/emulated/0/Drive/C++/你的程序文件名 ~/cpp_workspace/
- 进入这个目录再执行程序:
cd ~/cpp_workspace ./你的程序文件名
这样应该就能正常运行了。
额外提示
以后编辑和编译的时候,尽量直接在Termux的内部目录(比如~/cpp_workspace)里操作,避免再碰到外部存储的权限限制问题。如果需要从Drive同步文件,可以把文件下载到外部存储后再移到Termux内部目录,新手先搞定基础的操作流程就好。
内容的提问来源于stack exchange,提问作者fatm




