以下是我的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'
为什么会这样?
答案 0 :(得分:2)
您对test
的规则是错误的:它覆盖了main.o
。应该是
g++ -o test main.o $(LDFLAGS)
或者您可以使用built-in variables:
g++ -o $@ $^ $(LDFLAGS)
答案 1 :(得分:1)
创建可执行文件的行是错误的。
def is_superuser(self):
'''Access all the things'''
if self.user.email in ["member1@xyz.com","member2@xyz.com"]:
return True
else:
return False
在这里,您要告诉g ++从无对象模块开始生成可执行文件test: main.o
g++ -o main.o $(LDFLAGS)
。 C运行时正确地抱怨它找不到任何main.o
函数;即使它设法吐出一个可执行文件,它也会覆盖您的main
对象模块。
您可能想要的是:
main.o
表示“使用test: main.o
g++ -o test main.o $(LDFLAGS)
对象模块生成可执行文件test
”。
答案 2 :(得分:0)
尝试将可执行文件的规则更改为
test: main.o
g++ -o $@ $^ $(LDFLAGS)