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