Makefile學習記錄(三)

2021-08-21 02:50:24 字數 774 閱讀 4012

1. 在專案編譯中想將幾個靜態庫合併成乙個靜態庫

嘗試:ar  crv a.a  b.a  c.a

然後使用:

gcc -o test -la  

ld 報錯找不到b.a中包含的函式

需要先將靜態庫解壓後在合併

ar x a.a

ar x b.a

ar x c.a

ar crv  a.a *.o

ar這個壓縮指令可以理解為windows的壓縮工具

在你壓縮乙個a.rar 然後 b.rar,直接將a.rar和b.rar合併為c.rar ,c.rar包含的就是兩個.rar包

而不是包中的內容,這樣你需要將a.rar解壓成檔案,b.rar也是然後合併。

這樣理解就可以知道為什麼ld的時候找不到b.a的函式,因為b.a被整個合併到a.a而不是以.o的形式

所以ld無法識別

2.  靜態庫合併到動態庫

先前以為在生成動態庫時只要將引用的靜態庫指定好就可以鏈結進動態庫

不過在呼叫so庫時又出現了undefined symbol 錯誤

通過nm檢視庫檔案:

函式前都是t,表示包含,如果為u則表示未包含,還需要鏈結其他庫

3. 動態庫合入靜態庫

無法實現

makefile學習記錄

一.環境變數makefiles和include的區別 1.環境變數makefiles所制定的makefile檔案中的 目標 不會被作為make執行的終極 目標 2.環境變數所定義的檔案列表是否存在不會導致make錯誤,也不退出 3.在執行make時,首先讀取的是環境變數makefiles所指定的檔案...

makefile 語法記錄

是最基本的賦值 是覆蓋之前的值 是如果沒有被賦值過就賦予等號後面的值 是新增等號後面的值 c.o 這句話的意思就是 o c 也就是說,所有的.o檔案,依賴於對應的.c檔案.c.o 字尾規則。它告訴make 後面的命令 使用從.c檔案生成.o 目標檔案除去字尾的部分,如果目標是xx.o,那麼 xx 依...

Makefile編寫記錄

近期學習 linux 需要使用 makefile,網上蒐羅了很多這方面的資料,所裡在這裡做乙個整理。1 靜態模式 看乙個例子 objects foo.o bar.o all objects objects o c cc c cflags o 上面的例子中,指明了我們的目標從 object 中獲取,o...