linux分文件编程、静态库与动态库
參考:linux靜態(tài)庫與動態(tài)庫編程
作者:丶PURSUING
發(fā)布時間:2021-02-02 16:51:49
網(wǎng)址:https://blog.csdn.net/weixin_44742824/article/details/113539449?spm=1001.2014.3001.5501
目錄
- 一、分文件編程的引入
- 優(yōu)點
- 實現(xiàn)
- 二、庫的概念
- 什么是庫
- 靜態(tài)庫動態(tài)庫優(yōu)缺點
- 三、庫的編程
- 靜態(tài)庫
- 制作
- 使用
- 動態(tài)庫(常用)
- 制作
- 使用(運行時鏈庫需添加環(huán)境變量)
- 四、其他
- 1.secureCRT支持中文編碼
- 2. du指令計算文件大小
一、分文件編程的引入
簡單來說就是模塊化編程
優(yōu)點
- 分工明確
- 方便調(diào)試
- 主程序簡潔
實現(xiàn)
EG:用分文件編程的形式寫一個簡單的加法程序
< > 直接去默認路徑 /usr/include 尋找頭文件,找不到直接報錯。多用于系統(tǒng)頭文件
" " 先在當前路徑尋找,沒有則去默認路徑。用于自己創(chuàng)建的頭文件。
ls /usr/include |grep stdio 篩選
順序總結(jié):聲明(.h文件)-> 定義(.c文件)-> 使用(main函數(shù))
二、庫的概念
什么是庫
庫是一種可執(zhí)行代碼的二進制形式,可以被操作系統(tǒng)載入內(nèi)存執(zhí)行。就是將源代碼轉(zhuǎn)化為二進制格式的源代碼,相當于進行了加密,別人可以使用庫,但是看不到庫中的內(nèi)容。
靜態(tài)庫:在程序執(zhí)行之前(編譯)就加入到目標程序中
動態(tài)庫:是在程序執(zhí)行時動態(tài)(臨時)由目標程序去調(diào)用。動態(tài)庫與共享庫是同一個東西(linux上叫共享庫,文件后綴.so)(windows上叫動態(tài)庫,文件后綴.dll)
靜態(tài)庫動態(tài)庫優(yōu)缺點
參考博文
靜態(tài)庫優(yōu)點:
①靜態(tài)庫被打包到應(yīng)用程序中加載速度快
②發(fā)布程序無需提供靜態(tài)庫,因為已經(jīng)在app中,移植方便
靜態(tài)庫缺點:
①鏈接時完整地拷貝至可執(zhí)行文件中,被多次使用就有多份冗余拷貝。
②更新、部署、發(fā)布麻煩。
動態(tài)庫優(yōu)點:
①鏈接時不復(fù)制,程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存,供程序調(diào)用,系統(tǒng)只加載一次,多個程序共用,節(jié)省內(nèi)存。
②程序升級簡單,因為app里面沒有庫的源代碼,升級之后只要庫的名字不變,函數(shù)名以及參數(shù)不變,只是實現(xiàn)做了優(yōu)化,就能加載成功。
動態(tài)庫缺點:
①加載速度慢于靜態(tài)庫。
②發(fā)布程序需要提供依賴的動態(tài)庫。
三、庫的編程
EG:把加法功能的程序分別制作成靜態(tài)庫、動態(tài)庫,然后使用庫
源代碼如上文所示,現(xiàn)有主程序 mainFunc.c與功能程序 addFunc.c
靜態(tài)庫
制作
交付文件為 .a與帶注釋的 .h
rcs為傳入的參數(shù),輸入ar后回車可查看具體參數(shù)的意義
使用
-laddFunc鏈接庫,為libaddFunc.a的砍頭去尾
-L 去指定路徑(./)尋找靜態(tài)庫。否則默認為到/usr/lib尋找。
動態(tài)庫(常用)
制作
交付文件為 .so與帶注釋的 .h
動態(tài)庫的命名只需要前有l(wèi)ib,后有.so即可
-shared 指定生成動態(tài)庫
-fpic 標準,fPIC 選項作用于編譯階段,在生成目標文件時就得使用該選項,以生成位置無關(guān)的代碼。
使用(運行時鏈庫需添加環(huán)境變量)
此時還不能直接./mainDy運行,運行時動態(tài)調(diào)庫,會找不到動態(tài)庫。(程序執(zhí)行過程由目標程序去尋找調(diào)用動態(tài)庫,默認路徑為usr/lib)
①將動態(tài)庫拷貝到系統(tǒng)庫的目錄再運行(不建議使用)
sudo cp libaddc.so /usr/lib/②把當前位置(“動態(tài)庫的位置”)作為環(huán)境變量再運行
export LD_LIBRARY_PATH="" //pwd命令將當前路徑放入引號里面之前還學習過myCp指令全局可用
但是這樣的環(huán)境變量僅是臨時的,只針對于這個窗口,換了一個窗口又不行了。
③寫一個shell腳本,然后運行該腳本
四、其他
1.secureCRT支持中文編碼
2. du指令計算文件大小
du mainDy//計算動態(tài)庫文件大小(單位是K)du xxx -h 當文件較大時可用此指令以M為單位顯示文件大小。
總結(jié)
以上是生活随笔為你收集整理的linux分文件编程、静态库与动态库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 写出gradle风格的groovy代码
- 下一篇: Linux有趣指令(二)