【问题标题】:C++ makefile error "implicit entry/start for main executable"C++ makefile 错误“主可执行文件的隐式输入/启动”
【发布时间】:2018-09-23 15:05:42
【问题描述】:

我的项目有这样的结构:

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)

【问题讨论】:

  • 您似乎将单个目标文件链接到单个可执行文件中,而该目标文件(以及生成它的源文件)没有main 函数。您是 Makefile 应该构建和链接 多个 源(和对象)文件吗?您显示的输出是 full 构建日志吗?如果您删除目标文件并重新构建,您可以将 full 输出复制粘贴到您的问题中吗?
  • 问题出在这里:$(EXECUTABLE): $(OBJECTS) $(CXX) $(LDFLAGS) $&lt; -o $@$&lt; 是第一个先决条件,即第一个目标文件。你想要的是$^ 列出所有目标文件。
  • $(EXECUTABLE): $(OBJECTS)规则中,我相信你想用$^替换$&lt;。前者是“列表中的第一个文件”,后者是“列表中的所有文件”。
  • @JohanBoulé 现在应该更容易写出实际答案。 :)
  • 简而言之:您没有链接定义函数的目标文件。查看其他 cmets。

标签: c++ macos makefile compiler-errors


【解决方案1】:

问题出在这里:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 2011-07-13
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多