【发布时间】:2018-02-11 18:58:14
【问题描述】:
问题已解决,详情请访问本段底部。
我有一个程序:foo.cpp 和 bar.cpp,并创建了一个 Makefile 来编译它们。
这就是它(Makefile)的样子:
CC=g++
CFLAGS=-c
foo.o: foo.cpp
$(CC) $(CFLAGS) foo.cpp -o foo
all: foo.o bar.o
bar.o: bar.cpp
$(CC) $(CFLAGS) bar.cpp -o bar
现在,当我运行 make all 时,它会编译并且我在那里有输出文件,但是当我运行 ./foo 时,它给了我这个错误-->bash: ./foo: Permission denied
但是,如果我先执行 g++ foo.cpp,然后执行 ./a.out,它就会运行。
我看到了类似的问题,例如:https://askubuntu.com/questions/466605/cannot-open-output-file-permission-denied 并尝试了解决方案,但没有奏效。
我不明白为什么会这样。有人可以帮忙吗(我是 Makefiles 新手)?
谢谢
对于未来的访客
已完成的解决方案和错误:
1)使用-c flag,它创建了一个输出文件,而不是我试图执行的可执行文件。
2)更多信息,这里是链接器的答案:What's an object file in C?
【问题讨论】:
-
为什么要将 CC 重新定义为 g++?你已经有 CXX 了。但真正的问题是你的目标是错误的。
-
要运行这样的文件,需要将其标记为 executable (
chmod +x)。 -
@KlaasvanGend 我已经读过,为您使用的编译器执行 CC 是惯例,我也是初学者,所以不太了解,您能澄清一下目标是什么意思是错误的?
-
@JesperJuhl 是的,我已经这样做了,然后它会给出以下错误:无法执行二进制文件:执行格式错误
-
CC表示 C 编译器。您需要一个C++ 编译器。见manual。
标签: c++ bash makefile output c++14