C++ C++;“生成文件错误”;主可执行文件的隐式输入/启动“;
我的项目有以下结构:C++ C++;“生成文件错误”;主可执行文件的隐式输入/启动“;,c++,macos,makefile,compiler-errors,C++,Macos,Makefile,Compiler Errors,我的项目有以下结构: root |____Makefile | |___src | |____*.cpp | |___includes | |___*.h | |___obj |___tmp |___bin 问题是,当我尝试进行此操作时,我出现以下错误: g++ -std=c++11 obj/book.o -o bin/main Undefined symbols for architecture x86_64: "
root
|____Makefile
|
|___src
| |____*.cpp
|
|___includes
| |___*.h
|
|___obj
|___tmp
|___bin
问题是,当我尝试进行此操作时,我出现以下错误:
g++ -std=c++11 obj/book.o -o bin/main
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我的main.cpp在src中,而我有一个文件.h,其中我声明了一个结构和一些函数,还有一个.cpp,其中我定义了所有内容。大体上,在cpp中,我是这样做的
#include "../includes/myfile.h"
如何编译和修复此问题?
这是我的makefile:
CXX = g++
CXXFLAGS = -std=c++11 -I..
LDFLAGS = -std=c++11
EXECUTABLE= bin/main
SOURCES = $(wildcard src/*.cpp)
HEADERS = $(wildcard includes/*.h)
OBJECTS = $(patsubst src/%.cpp, obj/%.o, $(SOURCES))
BASE = $(USER)
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CXX) $(LDFLAGS) $< -o $@
obj/%.o: src/%.cpp
$(CXX) -c $(CXXFLAGS) $< -o $@
clean:
rm $(OBJECTS)
rmproper:
rm $(OBJECTS) $(EXECUTABLE)
pdf:
a2ps Readme.txt makefile $(HEADERS) $(SOURCES) -o /tmp/out.ps
ps2pdf /tmp/out.ps $(BASE).pdf
zip:
zip $(BASE).zip Readme.txt makefile $(HEADERS) $(SOURCES)
CXX=g++
CXXFLAGS=-std=c++11-I。。
LDFLAGS=-std=c++11
可执行文件=bin/main
SOURCES=$(通配符src/*.cpp)
标题=$(通配符包括/*.h)
OBJECTS=$(patsubst src/%.cpp,obj/%.o,$(源代码))
基数=$(用户)
全部:$(可执行)
$(可执行文件):$(对象)
$(CXX)$(LDFLAGS)$<-o$@
obj/%.o:src/%.cpp
$(CXX)-c$(CXXFLAGS)$<-o$@
清洁:
rm$(对象)
正确的:
rm$(对象)$(可执行文件)
pdf:
a2ps Readme.txt makefile$(头文件)$(源文件)-o/tmp/out.ps
ps2pdf/tmp/out.ps$(基本).pdf
邮编:
zip$(基本).zip Readme.txt makefile$(标题)$(源代码)
问题在于:
$(可执行文件):$(对象)
$(CXX)$(LDFLAGS)$<-o$@
$问题在于:
$(可执行文件):$(对象)
$(CXX)$(LDFLAGS)$<-o$@
$似乎您正在将单个对象文件链接到单个可执行文件中,而该对象文件(以及生成该文件的源文件)没有main
函数。您是否应该构建和链接多个源(和对象)文件?您的输出是否显示完整的生成日志?如果删除对象文件并重新生成,是否可以将完整输出复制粘贴到问题中?问题在于:$(可执行文件):$(对象)$(CXX)$(LDFLAGS)$<-o$@
<代码>$在$(可执行文件):$(对象)
规则,我相信你想替换$@JohanBoulé现在应该更容易写出一个实际的答案了。:)简而言之:您没有链接定义函数的对象文件。查看其他注释。似乎您正在将单个对象文件链接到单个可执行文件,而该对象文件(以及生成该文件的源文件)没有main
函数。您是否应该构建和链接多个源(和对象)文件?您的输出是否显示完整的生成日志?如果删除对象文件并重新生成,是否可以将完整输出复制粘贴到问题中?问题在于:$(可执行文件):$(对象)$(CXX)$(LDFLAGS)$<-o$@
<代码>$在$(可执行文件):$(对象)
规则,我相信你想替换$@JohanBoulé现在应该更容易写出一个实际的答案了。:)简而言之:您没有链接定义函数的对象文件。见其他评论。