linux so庫(kù)生成(一)
來(lái)源:程序員人生 發(fā)布時(shí)間:2015-02-04 09:11:43 閱讀次數(shù):5416次
Dear!
先貼個(gè)大眾版,希望逐字理解,有益!
$gcc -shared -Wl,-soname,libhello.so.1 -o libhello.so.1.0 hello.o
另外再建立兩個(gè)符號(hào)連接:
$ln -s libhello.so.1.0 libhello.so.1
$ln -s libhello.so.1 libhello.so
這樣1個(gè)libhello的動(dòng)態(tài)連接庫(kù)就生成了。最重要的是傳gcc -shared 參數(shù)使其生成是動(dòng)態(tài)庫(kù)而不是普通履行程序。 -Wl 表示后面的參數(shù)也就是-soname,libhello.so.1直接傳給連接器ld進(jìn)行處理。實(shí)際上,每個(gè)庫(kù)都有1個(gè)soname,當(dāng)連接器發(fā)現(xiàn)它正在查找的程序庫(kù)中有這樣1個(gè)名稱,連接器便會(huì)將soname嵌入連結(jié)中的2進(jìn)制文件內(nèi),而不是它正在運(yùn)行的實(shí)際文件名,在程序履行期間,程序會(huì)查找具有
soname名字的文件,而不是庫(kù)的文件名,換句話說(shuō),soname是庫(kù)的辨別標(biāo)志。 這樣做的目的主要是允許系統(tǒng)中多個(gè)版本的庫(kù)文件共存,習(xí)慣上在命名庫(kù)文件的時(shí)候通常與soname相同 libxxxx.so.major.minor 其中,xxxx是庫(kù)的名字,major是主版本號(hào),minor 是次版本號(hào)
Do you understand?
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)