Linux 不想运行编译后的文件

问题描述 投票:0回答:1

对不起,伙计们,但我整个早上都在为这个问题苦苦挣扎。 我为 Gold Parser 创建了一个解析器引擎,改进了现有引擎,添加了对 UTF-8 或 UNICODE 的完整支持以及错误处理。我希望它也可以在 Linux 上使用,因此我想在 Linux 上测试它,同时提高我使用此 SO(Ubuntu 22) 的技能并学习 Makefile。 为了急于在 stackoverflow 上问这个问题,我将所有内容上传到了 github 上。图书馆 是

mparser
main
包含测试功能,
dhash
是我的调试工具(仅检查内存泄漏),我包含了
dhash
,所以我有一个更复杂的场景来学习Makefile。 问题是什么:它不能在 Linux 上运行。 我从这个网站Make教程复制了Makefile,在我理解了80%之后 我做了一些更改来运行我的项目,它可以在 github 上找到,但我也将其发布在这里:

IDIR =include
CC=gcc
CFLAGS=-I$(IDIR)

ODIR=obj
LDIR =../lib

LIBS=-lm

_DEPS = dhash.h mparser.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))
FDEPS =$(_DEPS)

_OBJ =  mparser.o dhash.o main.o 
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))


$(ODIR)/%.o: %.c $(FDEPS)
    $(CC) -c -o $@ $< $(CFLAGS)

mparser: $(OBJ)
    $(CC) -o $@ $^ $(CFLAGS) $(LIBS)

.PHONY: clean

clean:
    rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~ 

在Linux中,我将当前目录

.
添加到建议的路径中:here

我运行

file mparser
,它说:
mparser: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=7b91119ab5e7a335c16c61c883ad5092da23eab5, for GNU/Linux 3.2.0, not stripped

所以有一个神奇的词
executable
,正如建议的这里
但如果我启动
mparser
它会说拒绝访问。我也尝试过整个路径:
/media/jurhas/INTENSO/mparser
也不起作用。
我的程序编译后如何在Linux上运行?

编辑:

c linux gcc makefile
1个回答
0
投票

“:权限被拒绝”当尝试执行某些操作时,总是意味着 Linux 文件权限。

您正在尝试在没有可执行标志的 Linux 文件系统上“执行”一个文件。

这是查看文件是否可执行的最简单方法:

user@host:~$ ls -lah file.txt 
-rw-rw-r-- 1 myuser myusergroup 0 Jan 23 13:37 file.txt

你想看这个:

-rw-rw-r--

它指出:

  • 第一个字符 (-):破折号表示它是一个文件(例如,不是目录)
  • char 2-4 (rw-):文件的所有者 (myuser) 被允许读 (r) 写 (w) 并且不执行 (-) 文件
  • char 5-6 (rw-): 文件所在组 (myusergroup) 允许读 (r) 写 (w) 且不执行 (-) 文件
  • chat 7-8 (r--):不是文件所有者 (myuser) 或拥有该文件的组 (myusergroup) 的每个人都只允许读取 (r) 而不允许写入或执行 ( --) 文件

rw-rw-r--
是大多数 Linux 发行版的默认设置。

您要做的就是使您的文件可执行。有很多方法可以实现这一点。

chmod +x

# before
user@host:~$ ls -lha file.txt 
-rw-rw-r-- 1 user user 0 Jan 23 13:37 file.txt

# give everyone executable permissions
user@host:~$ chmod +x file.txt 

# after
user@host:~$ ls -lha file.txt 
-rwxrwxr-x 1 user user 0 Jan 23 13:37 file.txt

现在每个人都可以执行您的文件。这很可能不是您想要的。

chmod u+x

user@host:~$ ls -lha file.txt 
-rw-rw-r-- 1 user user 0 Jan 23 13:41 file.txt
user@host:~$ chmod u+x file.txt 
user@host:~$ ls -lha file.txt 
-rwxrw-r-- 1 user user 0 Jan 23 13:41 file.txt

您可以使用

u+x
作为 chmod 的参数,仅授予拥有该文件的用户执行权限。

如果这没有帮助,请尝试

mount | grep noexec
。如果您的文件位于使用 noexec 挂载的文件系统中,您将无法执行其中的文件。您可以更新您的
/etc/fstab
(列出启动时要挂载的内容的文件),删除 noexec 并使用
mount -o remount /path/to/mounted/dir

重新挂载目录
© www.soinside.com 2019 - 2024. All rights reserved.