编译后的mparser可执行文件在Ubuntu 22中运行提示权限被拒
解决Linux下编译后程序权限拒绝无法运行的问题
核心原因分析
从描述和file命令输出来看,程序本身是合法的ELF可执行文件,但出现权限拒绝,大概率是两个原因:
- 文件本身没有执行权限
- 程序所在的存储分区(比如你提到的
/media/jurhas/INTENSO)被挂载时禁用了执行权限(常见于NTFS/FAT32格式的外部存储)
解决方案步骤
1. 给程序添加执行权限
执行以下命令,为mparser文件添加可执行权限:
chmod +x mparser
执行后尝试用相对路径运行:./mparser(避免PATH缓存影响)。
2. 修复分区挂载权限
如果添加权限后仍报错,说明是分区挂载限制了执行:
- 先查看分区挂载信息,确认是否有
noexec选项:
mount | grep /media/jurhas/INTENSO
输出中若包含noexec,说明分区被禁止执行文件。
临时修复(重启后失效):
- 卸载分区:
sudo umount /media/jurhas/INTENSO- 重新挂载并添加
exec选项:
sudo mount -o exec /dev/sdXn /media/jurhas/INTENSO(替换
/dev/sdXn为你的设备名,比如sdb1,可通过lsblk命令查看)永久修复(修改fstab):
编辑/etc/fstab文件:sudo nano /etc/fstab找到对应分区的配置行,在挂载选项中加入
exec,例如NTFS格式的配置:/dev/sdXn /media/jurhas/INTENSO ntfs-3g defaults,exec 0 0保存后执行
sudo mount -a生效。
补充:Makefile优化建议
你的Makefile存在依赖路径错误:FDEPS =$(_DEPS)未使用正确的头文件路径,应改为$(DEPS),否则编译时可能找不到头文件。修改后:
$(ODIR)/%.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS)
内容的提问来源于stack exchange,提问作者San Pei
相关产品推荐
相关产品推荐

