靜態與動態鏈結庫

2021-10-23 13:08:48 字數 689 閱讀 3312

動態庫(共享庫)

(1)與位置無關,即通過偏移量去查詢 -fpic 作用於編譯階段,告訴編譯器產生與位置無關**(position-independent code),執行時加入記憶體

(2)生成二進位制: gcc -fpic -c *.c -i …/include/

(3)生成庫 gcc -shared -o libcalc.so *.o

gcc -shared -fpic -o 1.so 1.c

這裡有乙個-fpic引數

pic就是position independent code

pic使.so檔案的**段變為真正意義上的共享

(一) 找不到動態庫解決方法:

加入lib(不推薦) ; 環境變數ld_library_path ;修改/etc/ld.so.conf,新增路徑

找到***.so放到 /usr/lib /lib – 不推薦

o sudo find /usr/local -name 「libevent.so」

修改/etc/ld.so.conf

o 動態庫路徑新增到該檔案中 - 絕對路徑

o sudo ldconfig -v

(二) 動靜對比區別

靜態庫直接載入進入原始碼即test區速度快,體積大,不需要發布,更新需要重新編譯動態庫載入共享記憶體速度沒那麼快,體積小靈活,一般不用重新編譯

動態鏈結庫與靜態鏈結庫

有人會想,動態鏈結這樣麻煩,為什麼還要用呢?這裡有乙個技術問題,對這個問題的解決直接導致了動態載入的需求。問題是有些dll只在某個windows版本中存在,或某個api只在某些windows版本中被加入指定的dll。當你使用靜態鏈結的.exe試圖在不支援的windows版本上執行時,系統會彈出系統對...

動態鏈結庫與靜態鏈結庫

原貼出處 http blog.csdn.net benny5609 archive 2008 04 17 2298998.aspxs 還有參考 http msdn.microsoft.com zh cn library 1ez7dh12 v vs.100 aspxs 首先通過乙個簡單的靜態鏈結庫的例...

靜態鏈結 庫 與動態鏈結 庫

靜態鏈結與動態鏈結 簡單的說,靜態庫和應用程式編譯在一起,在任何情況下都能執行,而動態庫是動態鏈結,顧名思義就是在應用程式啟動的時候才會鏈結,所以,當使用者的系統上沒有該動態庫時,應用程式就會執行失敗。再看它們的特點 動態庫 1.共享 多個應用程式可以使用同乙個動態庫,啟動多個應用程式的時候,只需要...