Build makefile可执行文件权限被拒绝
我有一个makefile,它创建一个可执行(“ls”)并将其放置在一个名为bin的文件夹中。但是,当我尝试在之后运行该可执行文件时,会出现以下错误: “-bash:bin/ls:权限被拒绝”Build makefile可执行文件权限被拒绝,build,permissions,makefile,Build,Permissions,Makefile,我有一个makefile,它创建一个可执行(“ls”)并将其放置在一个名为bin的文件夹中。但是,当我尝试在之后运行该可执行文件时,会出现以下错误: “-bash:bin/ls:权限被拒绝” 问题恰恰说明了问题所在:新创建的ls可执行文件缺少可执行位 在您的情况下,您明确禁用链接器,这几乎从来都不是一个好方法,除非您真的知道自己在做什么。我的盲目猜测是,您的源代码缺少intmain(int,char**)函数,因此链接会给您一个错误(因为您无法使用标准链接器设置构建一个没有一个main的可执行文
问题恰恰说明了问题所在:新创建的
ls
可执行文件缺少可执行位
在您的情况下,您明确禁用链接器,这几乎从来都不是一个好方法,除非您真的知道自己在做什么。我的盲目猜测是,您的源代码缺少intmain(int,char**)
函数,因此链接会给您一个错误(因为您无法使用标准链接器设置构建一个没有一个main
的可执行文件)。但是,如果在CFLAGS
中使用-c
,则既不会得到警告,也不会得到可执行文件
编辑:文件ls
将显示如下内容
ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
在用-c
编译的二进制文件上,而完全成熟的可执行文件
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=6cf260a90064be20cfa17ff5fefd7040254f79e1, not stripped
注意一个文件是如何执行的此外,它与一些东西相关联,包括在
ls
的main
函数之前执行的启动代码。没有这些,操作系统就不知道如何运行你的程序 使用-c
标志没有问题;错的是把它放在CFLAGS
中。通常,您会使用-c-o file.o
生成对象文件,然后这些文件可以链接在一起生成可执行文件;这对于大型项目非常有用,因为在这些项目中,您不希望每次对其中一个文件进行一点更改时都重新编译所有文件gcc
设置x
仅对可执行文件的权限-c
在没有x
权限的情况下生成文件chmod+x
不会有帮助,因为这些文件也不是可执行图像,但当您试图运行该文件时,它会产生不同的错误。@rici完全正确!谢谢你的详细说明。
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=6cf260a90064be20cfa17ff5fefd7040254f79e1, not stripped