我正在學習ARToolKit和CMake。我正在嘗試製作一個CMake例程來複制ARToolKit在其Makefile文件中做的事情。我發現這一點:爲什麼靜態庫正在被用於兩次編譯工作?
LIBS= -lARgsub_lite -lARvideo -lAR -lARICP -lAR -lglut -lGLU -lGL -lX11 -lm -lpthread -ljpeg -ldc1394 -lraw1394
$(BIN_DIR)/simpleLite: simpleLite.o $(OBJS)
cc -o $(BIN_DIR)/simpleLite simpleLite.o $(OBJS) $(LDFLAG) $(LIBS)
我注意到-lAR
在聲明兩次。我決定複製這個在我的CMake文件中,也宣佈了兩次。
set(ART_STATICS libARgsub_lite.a libARvideo.a libAR.a libARICP.a libAR.a)
link_directories(${ART_DIR}/lib)
它的工作原理。但是如果我刪除最後一個是重複的,那麼程序會抱怨它無法從libAR庫中找到函數。 (確切地說它是libAR的matrix.h中的矩陣函數)爲什麼?訂單是否重要?或者libARICP.a
可能在libAR.a
中「消耗」某些東西,因此您必須再次聲明它?對不起,我不明白鏈接靜態庫的內部運作...
是的,訂單很重要。這些庫之間可能存在依賴關係,因此必須以這種方式進行處理。 –
您應該考慮使用-start-group和--end-group來指定循環依賴關係,而不是重複。 –