我有一个makefile,它创建一个可执行的(“ls”)并将其放在一个名为bin的文件夹中。但是,当我尝试之后运行该可执行文件时,我收到错误: “-bash:bin / ls:Permission denied”
VPATH = src
CC = g++
CFLAGS =-c -Wall -Werror -ansi -pedantic
all: clean rshell
rshell: ls.cpp
$ mkdir -p ./bin
$ $(CC) $(CFLAGS) src/ls.cpp -o bin/ls
clean:
rm -rf bin
答案 0 :(得分:3)
问题确切地说出了什么问题:新创建的ls
可执行文件缺少可执行位。
在你的情况下,你明确禁用链接器,这几乎不是一个好方法,除非你真的真的知道你在做什么。我的盲目猜测是你的源代码缺少一个int main(int, char**)
函数,因此链接会给你一个错误(因为你不能用标准的链接器设置构建一个没有一个{{1}的可执行文件}})。但是,对于main
中的-c
,您既不会收到警告也不会收到可执行文件。
编辑:CFLAGS
会显示类似
file 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
;)此外,它与某事相关联,包括在executable
之前执行的启动代码{{1功能。没有它,操作系统将不知道如何运行您的程序。