文件目錄結(jié)構(gòu)
tree
.
├── bin
├── include
│?? └── calc.h
├── lib
│?? ├── add.c
│?? ├── div.c
│?? ├── mul.c
│?? └── sub.c
└── src
└── main.c
4 directories, 6 files
靜態(tài)庫(kù)生成
使用ar命令
ar命令用于創(chuàng)建和管理靜態(tài)庫(kù)。下面是使用ar命令生成靜態(tài)庫(kù)的步驟:
# 編譯源文件為目標(biāo)文件(.o文件)
gcc -c ./lib/*.c
mv *.o ./bin
# 使用ar命令創(chuàng)建靜態(tài)庫(kù)文件(.a文件):
ar rcs libcalc.a ./bin/*.o
mv libcalc.a ./lib
gcc src/main.c -I include/ -L lib/ -lcalc -o bin/main
MAIN ENTRY
please input m and n:
7 2
add:
7+2=9
sub:
7-2=5
mul:
7x2=14
div:
7/2=3
動(dòng)態(tài)庫(kù)生成
# 編譯源文件為目標(biāo)文件(.o文件)
#-fPIC標(biāo)志用于生成位置無(wú)關(guān)代碼,位置無(wú)關(guān)代碼是一種可執(zhí)行或共享庫(kù)的代碼,可以在內(nèi)存的任何位置加載并運(yùn)行,而不依賴于特定的內(nèi)存地址。這在生成共享庫(kù)(動(dòng)態(tài)鏈接庫(kù))時(shí)特別重要,因?yàn)楣蚕韼?kù)需要能夠在不同的進(jìn)程和內(nèi)存地址中加載,而不會(huì)發(fā)生沖突或錯(cuò)誤。
gcc -c -fPIC lib/*.c
mv *.o ./bin
gcc ./bin/*.o -shared -o lib/libcalc.so
gcc src/main.c -I include/ -L lib/ -lcalc -o bin/main
./main: error while loading shared libraries: libcalc.so: cannot open shared object file: No such file or directory
執(zhí)行直接報(bào)錯(cuò)了,說(shuō)明系統(tǒng)沒(méi)有找到庫(kù)位置
而動(dòng)態(tài)庫(kù)的搜索路徑搜索的先后順序是:
1.編譯目標(biāo)代碼時(shí)指定的動(dòng)態(tài)庫(kù)搜索路徑
2.環(huán)境變量LD_LIBRARY_PATH指定的動(dòng)態(tài)庫(kù)搜索路徑
3.配置文件/etc/ld.so.conf中指定的動(dòng)態(tài)庫(kù)搜索路徑
4.默認(rèn)的動(dòng)態(tài)庫(kù)搜索路徑/lib or /usr/lib
#1 編譯目錄到指定動(dòng)態(tài)庫(kù)路徑
gcc src/main.c -I include/ -L lib/ -Wl,-rpath="/home/xxx/prj/lee
tcode/src/test/libtest/lib" -lcalc -o ./bin/main
#2 指定環(huán)境變量正常執(zhí)行
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH
#3 配置文件/etc/ld.so.conf添加庫(kù)路徑
# /home/xxx/prj/leetcode/src/test/libtest/lib
sudo vim /etc/ld.so.conf
sudo ldconfig #更新動(dòng)態(tài)鏈接器緩存
#4 放入到/usr/lib正常執(zhí)行
sudo mv lib/libcalc.so /usr/lib
如果同時(shí)存在動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)文件,系統(tǒng)會(huì)優(yōu)先選中動(dòng)態(tài)庫(kù)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-710205.html
參考鏈接
gcc 使用中常用的參數(shù)及命令
動(dòng)態(tài)庫(kù)加載路徑之RPATH與RUNPATH(小記)
GCC創(chuàng)建和使用靜態(tài)鏈接庫(kù)(.a文件)
Options for Linking
Creating and Using Dynamic Libraries ( C )
linux查看、添加、刪除環(huán)境變量文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-710205.html
到了這里,關(guān)于C語(yǔ)言 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)生成的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!