【问题标题】:C++/Makefile error: undefined reference to `main'C++/Makefile 错误:未定义对“main”的引用
【发布时间】:2018-09-22 01:34:15
【问题描述】:

我的 C++ 项目中的文件树是这样的:

project/
        source/
                main.cpp (with int main() function)
                a.cpp
                a.h
                b.cpp
                ...
        obj/
        Makefile

但是当我编译它时,它会抛出一个错误:“In function _start': (.text+0x20): undefined reference to main'”

我的makefile是:

EXECUTABLE = name_of_program
CXX = g++
CXXFLAGS = -Wall -Isource
LIBS =

SRC_DIR = source
OBJ_DIR = obj
SRC = $(wildcard $(SRC_DIR)/*.cpp)
OBJ = $(SRC:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)

.PHONY: all clean

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJ)
        $(CXX) -o $@ $^ $(LIBS) 

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
        $(CXX) $(CXXFLAGS) -o $@ $<
        $(CXX) $(CXXFLAGS) -o $@ -c $< 

clean:
        rm $(OBJ)

我应该纠正哪些事情才能使其正确编译?我知道这是一个编译器错误,但我确定它与 Makefile 有关。

【问题讨论】:

  • 看起来应该可以了。当您尝试在命令行上构建可执行文件(例如不使用 Make)时会发生什么?

标签: c++ makefile


【解决方案1】:

我没有足够的资源来重现该问题,但通过检查,您似乎在此处多出了一行:

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
        $(CXX) $(CXXFLAGS) -o $@ $<
        $(CXX) $(CXXFLAGS) -o $@ -c $< 

删除第一行,这样您就不会尝试独立链接每个目标文件。

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
        $(CXX) $(CXXFLAGS) -o $@ -c $< 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多