编译时c ++未定义的对“main”的引用

时间:2015-11-18 11:30:27

标签: c++ makefile

尝试使用此附加的makefile后,出现的错误是:

(.text+0x20): undefined reference to `main'

collect2: error: ld returned 1 exit status

make: *** [Ass1F] Error 1

makefile是:

all: Ass1F

Ass1F: bin/main.o bin/x.o bin/y.o bin/z.o bin/w.o
g++ -o bin/main.o bin/x.o bin/y.o bin/z.o bin/w.o

@echo 'Finished building target: Ass1F'
@echo ' '

bin/x.o: src/x.cpp
g++ -g -Wall -Weffc++ -c -Linclude -o bin/x.o src/x.cpp

bin/y.o: src/y.cpp
g++ -g -Wall -Weffc++ -c -Linclude -o bin/y.o src/y.cpp

bin/z.o: src/z.cpp
g++ -g -Wall -Weffc++ -c -Linclude -o bin/z.o src/z.cpp

bin/w.o: src/w.cpp
g++ -g -Wall -Weffc++ -c -Linclude -o bin/w.o   src/w.cpp

bin/main.o: src/main.cpp
g++ -g -Wall -Weffc++ -c -Linclude -o bin/main.o src/main.cpp

clean: 
rm -f bin/*

我应该怎么处理这个问题? 原因是代码中的makefile或其他东西? 只是为了让你知道我们使用eclipse来编写代码,一切都运行得很好 - 没有任何错误。

感谢

2 个答案:

答案 0 :(得分:4)

g++ -o bin/main.o bin/x.o bin/y.o bin/z.o bin/w.o尝试创建名为bin/main.o的可执行文件,覆盖其先前的内容。

应该是例如g++ -o Ass1F bin/main.o bin/x.o bin/y.o bin/z.o bin/w.o

答案 1 :(得分:0)

Ass1F的makefile配方不正确,它没有指定输出文件,os make使用bin/main.o作为输出文件而不是其中一个输入文件。

您可以使用模式规则(即使用通配符)并使用预定义的变量(例如$@(目标名称)和$^(先决条件列表)和CXX(C ++编译器):

CXXFLAGS  = -g -Wall -Weffc++
CPPFLAGS =
LDFLAGS =
LDLIBS =

all: Ass1F

Ass1F: bin/main.o bin/x.o bin/y.o bin/z.o bin/w.o
        $(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS)
        @echo 'Finished building target: Ass1F'
        @echo ' '

bin/%.o: src/%.cpp
        $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $^

clean: 
        rm -f bin/*