1.testa.c
[cpp] view plain copy5.%20main.c
[cpp]%20view%20plain%20copy%20-shared該選項(xiàng)指定生成動(dòng)態(tài)連接庫(kù)(讓連接器生成T類型的導(dǎo)出符號(hào)表,有時(shí)候也生成弱連接W類型的導(dǎo)出符號(hào)),不用該標(biāo)志外部程序無(wú)法連接。相當(dāng)于一個(gè)可執(zhí)行文件-fPIC:表示編譯為位置獨(dú)立的代碼,不用此選項(xiàng)的話編譯后的代碼是位置相關(guān)的所以動(dòng)態(tài)載入時(shí)是通過(guò)代碼拷貝的方式來(lái)滿足不同進(jìn)程的需要,而不能達(dá)到真正代碼段共享的目的。
然后,通過(guò)通過(guò)命令
[plain]%20view%20plain%20copy%20-L.:表示要連接的庫(kù)在當(dāng)前目錄中-ltest:編譯器查找動(dòng)態(tài)連接庫(kù)時(shí)有隱含的命名規(guī)則,即在給出的名字前面加上lib,后面加上.so來(lái)確定庫(kù)的名稱
%20 %20我們知道一個(gè)程序要想在內(nèi)存中運(yùn)行,除了編譯之外還要經(jīng)過(guò)鏈接和裝入這兩個(gè)步驟。當(dāng)然linux中動(dòng)態(tài)鏈接也是經(jīng)過(guò)這三個(gè)過(guò)程。Linux%20使用這個(gè)ld-linux.so*中的來(lái)裝載(其實(shí)這只是一個(gè)鏈接)其他庫(kù)。所以這個(gè)庫(kù)必須放在linux中/lib下。對(duì)于其他,通常我們共享庫(kù)放在/lib這個(gè)路徑下,而且也是系統(tǒng)默認(rèn)的搜索路徑。Linux共享庫(kù)的搜索路徑先后順序:1、編譯目標(biāo)代碼時(shí)指定的動(dòng)態(tài)庫(kù)搜索路徑:在編譯的時(shí)候指定-Wl,-rpath=路徑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ù)搜索路徑/lib5、默認(rèn)的動(dòng)態(tài)庫(kù)搜索路徑%20/usr/lib
此處,我們使用了第2中方法來(lái)使用該動(dòng)態(tài)庫(kù),先執(zhí)行以下命令,設(shè)置LD_LIBRARY_PATH的值
[plain]%20view%20plain%20copy%20新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注