首页 > 解决方案 > make 中未定义对“main”的引用

问题描述

以下是我的 Makefile:

CFLAGS = -c -g -W -O3 -Wall -Werror -Wshadow \
-Wno-long-long -Wpointer-arith -D_REENTRANT \
-D_POSIX_PTHREAD_SEMANTICS -DLINUX2 \
-I ./lib_acl_cpp/include
BASE_PATH=./acl
LDFLAGS = -L$(BASE_PATH)/lib_acl_cpp/lib -l_acl_cpp \
-L$(BASE_PATH)/lib_protocol/lib -l_protocol \
-L$(BASE_PATH)/lib_acl/lib -l_acl \
-lpthread
test: main.o
   g++ -o main.o $(LDFLAGS)
main.o: main.cpp
   g++ $(CFLAGS) main.cpp -o main.o

以下是main.cpp:

#include<iostream>
using namespace std;

int main()
{
   cout<<"hello";
   return 0;
}

我收到以下错误:

/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In 
function `_start':
(.text+0x20): undefined reference to `main'

为什么会这样?

标签: c++makefile

解决方案


你的规则test是错误的:它会覆盖main.o. 应该

g++ -o test main.o $(LDFLAGS)

或者您可以使用内置变量

g++ -o $@ $^ $(LDFLAGS)

推荐阅读