既然是link error
就一定是link层面的东西,也就是档案和档案之间的关系出了问题
在这里undefined reference代表他不知道要去哪里找那个函数
我自己写了类似的模式测了一下,问题应该在于在Makefile里的
xxxxx.o: <dependent files>
xxxxx
那个dependent files就我的经验来说,应该是只能有一个.cpp档
原因应该是一个.cpp档就只能对应到一个.o档
不然在link层次时会出现找不到位置的情况
(这我猜的啦,我跟linker没很熟XD 有兴趣的人我还可以问问)
所以正确的写法应该是:
*******
AR := ar
ARFLAGS := cr
CXX := g++
CPPFLAGS := -O2 -I../lib
all : ../bin/graphlab
@echo -n ""
clean :
rm *.o ../bin/graphlab
../bin/graphlab : main.o sys_cmd.o user_cmd.o graph.o ../lib/libgraphlab.a
$(CXX) $^ -o $@
main.o : main.cpp sys_cmd.h user_cmd.h
$(CXX) $(CPPFLAGS) -c $< -o $@
sys_cmd.o : sys_cmd.cpp sys_cmd.h ../lib/cmd.h
$(CXX) $(CPPFLAGS) -c $< -o $@
user_cmd.o : user_cmd.cpp user_cmd.h ../lib/cmd.h
$(CXX) $(CPPFLAGS) -c $< -o $@
graph.o : graph.cpp graph.h ../lib/cmd.h
$(CXX) $(CPPFLAGS) -c $< -o $@
****
我测了一下这样应该就可以过了~
BTW是Makefile应该还有更方便的写法:$
不需要每个档案都写一段
有人有兴趣我再PO上来好了(〞︶〝*)