繁体   English   中英

C ++ makefile错误“隐式进入/启动主要可执行文件”

[英]C++ makefile error “implicit entry/start for main executable”

我的项目具有以下结构:

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,我在其中声明一个struct和一些函数,以及一个.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)

问题在这里:

$(EXECUTABLE): $(OBJECTS) $(CXX) $(LDFLAGS) $< -o $@

$<是第一个先决条件,即$(OBJECTS)列表中的第一个目标文件$(OBJECTS)根据您的错误消息,它恰好是book.o )。 您要传递的是目标文件的整个列表,可以使用$^甚至$(OBJECTS)代替$<

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM