Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Build makefile可执行文件权限被拒绝_Build_Permissions_Makefile - Fatal编程技术网

Build makefile可执行文件权限被拒绝

Build makefile可执行文件权限被拒绝,build,permissions,makefile,Build,Permissions,Makefile,我有一个makefile,它创建一个可执行(“ls”)并将其放置在一个名为bin的文件夹中。但是,当我尝试在之后运行该可执行文件时,会出现以下错误: “-bash:bin/ls:权限被拒绝” 问题恰恰说明了问题所在:新创建的ls可执行文件缺少可执行位 在您的情况下,您明确禁用链接器,这几乎从来都不是一个好方法,除非您真的知道自己在做什么。我的盲目猜测是,您的源代码缺少intmain(int,char**)函数,因此链接会给您一个错误(因为您无法使用标准链接器设置构建一个没有一个main的可执行文

我有一个makefile,它创建一个可执行(“ls”)并将其放置在一个名为bin的文件夹中。但是,当我尝试在之后运行该可执行文件时,会出现以下错误: “-bash:bin/ls:权限被拒绝”


问题恰恰说明了问题所在:新创建的
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