C++基礎(chǔ)語(yǔ)法梳理:鏈接裝載庫(kù)丨Linux 的共享庫(kù)
Linux 的共享庫(kù)(Shared Library)
Linux 下的共享庫(kù)就是普通的 ELF 共享對(duì)象。
共享庫(kù)版本更新應(yīng)該保證二進(jìn)制接口 ABI(Application Binary Interface)的兼容
命名
libname.so.x.y.z
x:主版本號(hào),不同主版本號(hào)的庫(kù)之間不兼容,需要重新編譯
y:次版本號(hào),高版本號(hào)向后兼容低版本號(hào)
z:發(fā)布版本號(hào),不對(duì)接口進(jìn)行更改,完全兼容
路徑
大部分包括 Linux 在內(nèi)的開(kāi)源系統(tǒng)遵循 FHS(File Hierarchy Standard)的標(biāo)準(zhǔn),這標(biāo)準(zhǔn)規(guī)定了系統(tǒng)文件如何存放,包括各個(gè)目錄結(jié)構(gòu)、組織和作用。
/lib:存放系統(tǒng)最關(guān)鍵和最基礎(chǔ)的共享庫(kù),如動(dòng)態(tài)鏈接器、C 語(yǔ)言運(yùn)行庫(kù)、數(shù)學(xué)庫(kù)等
/usr/lib:存放非系統(tǒng)運(yùn)行時(shí)所需要的關(guān)鍵性的庫(kù),主要是開(kāi)發(fā)庫(kù)
/usr/local/lib:存放跟操作系統(tǒng)本身并不十分相關(guān)的庫(kù),主要是一些第三方應(yīng)用程序的庫(kù)
動(dòng)態(tài)鏈接器會(huì)在?/lib、/usr/lib?和由?/etc/ld.so.conf?配置文件指定的,目錄中查找共享庫(kù)
環(huán)境變量
LD_LIBRARY_PATH:臨時(shí)改變某個(gè)應(yīng)用程序的共享庫(kù)查找路徑,而不會(huì)影響其他應(yīng)用程序
LD_PRELOAD:指定預(yù)先裝載的一些共享庫(kù)甚至是目標(biāo)文件
LD_DEBUG:打開(kāi)動(dòng)態(tài)鏈接器的調(diào)試功能
so 共享庫(kù)的編寫(xiě)
使用 CLion 編寫(xiě)共享庫(kù)
創(chuàng)建一個(gè)名為 MySharedLib 的共享庫(kù)
CMakeLists.txt
library.h
library.cpp
so 共享庫(kù)的使用(被可執(zhí)行項(xiàng)目調(diào)用)
使用 CLion 調(diào)用共享庫(kù)
創(chuàng)建一個(gè)名為 TestSharedLib 的可執(zhí)行項(xiàng)目
CMakeLists.txt
main.cpp
執(zhí)行結(jié)果
今天的分享就到這里了,大家要好好學(xué)C++喲~
寫(xiě)在最后:對(duì)于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開(kāi)始!
微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地
C語(yǔ)言零基礎(chǔ)入門(mén)教程(83集全)
整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門(mén)教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!
