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