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é现在应该更容易写出一个实际的答案了。:)简而言之:您没有链接定义函数的对象文件。见其他评论。