2017-10-15 194 views
0
  1. 我嘗試做一個GNU生成文件生成靜態庫,我需要從一個共享庫的一些功能,所以我在makefile鏈接共享庫, 但它得到一個有關未定義參考`fooo」失敗
  2. 我也注意到編譯日誌沒有找到-lshared_lib

下一個片段是我在makefile可以在gnu makefile中對共享庫做靜態庫鏈接?

.cpp.o: 
    $(CC) $(CFLAGS) $(DEBUGFLAG) $(WARNING) -lshared_lib -c $*.cpp 

all: $(LIB_NAME) 
$(LIB_NAME) : $(OBJS) 
    $(rm) [email protected] 
    $(AR) [email protected] $(OBJS) 
    $(RANLIB) [email protected] 

回答

1

好寫的,第一你不能「鏈接」靜態圖書館。您不使用鏈接器來生成靜態庫,如上面所見,您使用歸檔程序(ar)。

由於靜態庫未鏈接,因此無法將共享庫與其鏈接。一個靜態庫只是一組捆綁的目標文件(你可以把它看作是一個包含目標文件的tar文件,添加了目錄(符號映射)),所以它不能引用共享庫。

如果你希望你的靜態庫使用的是在一些共享庫,那麼共享庫,必須在鏈接程序,在靜態庫鏈接的上市功能。

您的makefile中必須有這樣的配方,否則您將不會收到有關未定義引用的錯誤:創建靜態庫時不會評估引用(ar命令不能解析所有引用),因此您在創建時不會出錯。鏈接時,引用僅由鏈接器擴展。由於我們沒有可用的makefile的那部分,所以我們不能告訴你如何解決它。