既然是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上來好了(〞︶〝*)