step4 . day4 库函数和库函数的制作
函數(shù)庫(kù): 具有特定功能的函數(shù),系統(tǒng)或者第三方提供的編譯好的二進(jìn)制文件(如數(shù)學(xué)庫(kù)、線程庫(kù)等),分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)。
靜態(tài)庫(kù):代碼運(yùn)行時(shí)候,將靜態(tài)庫(kù)代碼復(fù)制進(jìn)文件(用到哪些復(fù)制哪些),移植性好,但是代碼體積大,升級(jí)庫(kù)后需要重新編譯源文件
生成靜態(tài)庫(kù)的步驟:
1)寫庫(kù)文件源碼? 即和之前頭文件實(shí)現(xiàn)的.c文件類似(通常函數(shù)庫(kù)也有頭文件)
2)把源碼編譯為目標(biāo)文件(*.o)? ? ? ? ?gcc -c xxxx.c xxx.c
3) 用ar命令把目標(biāo)文件生成lib文件? ? ?ar crs libxxx.a xxx.o xxx.o ...
4)寫調(diào)庫(kù)函數(shù)的主程序。
5)把生成的lib文件和主程序一起編譯鏈接
gcc -o 目標(biāo)文件名 -L庫(kù)路徑 -lxxx
gcc -o 目標(biāo)文件名 -static -L庫(kù)路徑 -lxxx
?
動(dòng)態(tài)庫(kù):不復(fù)制代碼到源代碼,在程序運(yùn)行時(shí)候同事加載庫(kù)至內(nèi)存,動(dòng)態(tài)庫(kù)可以被多個(gè)程序調(diào)用,動(dòng)態(tài)庫(kù)升級(jí)方便,但程序運(yùn)行依賴庫(kù)的加載
生成動(dòng)態(tài)庫(kù)的步驟:
1)寫庫(kù)文件源碼,同上
2)把源碼編譯為目標(biāo)文件(*.o)? ? ?gcc -c -fPIC xxxx.c xxx.c? (路徑無(wú)關(guān)文件)
3)生成動(dòng)態(tài)鏈接庫(kù)文件? ? ? ? ? ? ? ? ??gcc -shared -o libxxx.so xxx.o
4)寫調(diào)庫(kù)函數(shù)的主程序。
5)把生成的lib文件和主程序一起編譯鏈接
gcc -o 目標(biāo)文件名 -L庫(kù)路徑 -lxxx
6) 生成的庫(kù)文件執(zhí)行文件在執(zhí)行的時(shí)候找不到庫(kù)文件,
下面三種方法可選,
1 把動(dòng)態(tài)庫(kù)添加到系統(tǒng)的庫(kù)文件目錄中? ? ? ? ? ? ? ? ? ? ? ? ?//需要權(quán)限,不建議使用
2 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:你的動(dòng)態(tài)庫(kù)路徑? ?//推薦
3 添加/etc/ld.so.conf.d/*.conf文件,執(zhí)行l(wèi)dconfig刷新? ?//需要權(quán)限,不建議使用
轉(zhuǎn)載于:https://www.cnblogs.com/huiji12321/p/11305779.html
總結(jié)
以上是生活随笔為你收集整理的step4 . day4 库函数和库函数的制作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: step4 . day3 目录访问函数
- 下一篇: 计算是几维数组