Linux 檔案程式設計 靜態庫和動態庫

2021-10-09 10:26:01 字數 2071 閱讀 2188

從現在開始,進入樹莓派的開發程式設計階段階段

linux庫概念及相關程式設計

1.分模組程式設計

多個檔案如何編譯

編譯 gcc a.c b.c

#include 「」優先從當前路徑去找 ,

比如 test/tset.out ,gcc是先在test這個資料夾下面,先找找看,看有沒有這個標頭檔案。找不到再去 use/include (系統庫)去找

找不到的報錯

#include <> 是 gcc預設情況去系統庫檔案裡找 。 1)ls /usr/include/ 2)user/local/include

比如想看 和stdio相關的,加乙個管道過濾,可如下方法操作

參考博文

a) 靜態庫

程式執行前(編譯)就加入到目標程式中去了

b)動態庫

程式執行時動態(臨時)由目標程式去呼叫

優點缺點

靜態庫執行快

大動態庫

小執行慢

總結:

1) -l 是使用庫的名字 (砍頭去尾)

2) -l 指定告訴 gcc 從 -l指定的路徑去找,可以指定當前路徑去找。(./表示當前路徑)

3) 靜態庫已經很少使用了,基本上都是使用動態庫,但是還是要懂。

1  建立步驟1:將.c檔案生成.o

gcc demo.c -c
檢視.o  ls 

這個時候 demo.c 已經沒有用了,把它移到工作目錄去,或者直接把 demo.c(庫的原始碼乾掉)

2 將.o 打包

ar rcs libdemo.a demo.o
看下目錄下 ls ,編譯的庫已經生成了 恭喜

3 把庫給比人,別人如何使用呢?

砍頭去尾 ,頭'"lib"去掉 尾巴".a"去掉 ,只用中間的名字

編譯報錯:

原因: -l 有點像頭檔案,有限上 /usr/lib裡面去找,沒找著,報錯了。我們應該讓它在當前目錄去找,怎麼辦,使用如下方法 -l ./

(注意:是 -l 空格 ./)

執行一下,結果正確

備註:看下呼叫者寫的啥

把輸出取個名字:不叫a.out了,太low了 

在原來的末尾,新增 -o new_name

如 ar 

4.庫的使用

linux 靜態庫和動態庫

1.生成方式 靜態庫 首先將原始檔編譯成目標檔案 gcc c test.c o test.o 然後生成靜態庫 ar rc libstatic.a test.o 共享庫 首先將原始檔編譯成目標檔案 gcc c test.c o test.o 生成共享庫 gcc fpic shared o libsha...

Linux 靜態庫和動態庫

庫有兩種,一種是靜態鏈結庫,一種是動態鏈結庫,不管是哪一種庫,要使用它們,都要在程式中包含相應的include標頭檔案。我們先來回顧一下程式編譯的過程。如下圖 庫 本質乙個目標檔案,這個檔案的字尾有兩種格式,對應兩種庫 缺點是 檔案太大。多次拷貝庫程式,不僅浪費空間,而且檔案體積大 下面實現乙個靜態...

Linux 靜態庫和動態庫

我們指定c程式從 到乙個可執行程式需要經過預處理 編譯 彙編 鏈結。而最後一步鏈結又分為動態鏈結與靜態鏈結。靜態鏈結相當於就是講所要鏈結的庫提前放入鏈結的檔案,這樣子的檔案體積較大,但是可移植性較高。而動態鏈結是在執行的時候才去主動鏈結所需要鏈結的庫,這樣的 體積較小,多個程式共同使用庫的 我們li...