linux下静态库和动态库的制作与使用
1.首先先介紹一下什么是靜態庫、什么是動態庫?
靜態函數庫:
這類庫的名字一般是libxxx.a;利用靜態函數庫編譯成的文件比較大,因為整個函數庫的所有數據都會被整合進目標代碼中,他的優點就顯而易見了,即編譯后的執行程序不需要外部的函數庫支持,因為所有使用的函數都已經被編譯進可執行文件了。當然這也會成為他的缺點,因為如果靜態函數庫改變了,那么你的程序必須重新編譯,而且體積也較大。
動態函數庫:
這類庫的名字一般是libxxx.so,動態庫又稱共享庫;相對于靜態函數庫,動態函數庫在編譯的時候并沒有被編譯進目標代碼中,你的程序執行到相關函數時才調用該函數庫里的相應函數,因此動態函數庫所產生的可執行文件比較小。由于函數庫沒有被整合進你的程序,而是程序運行時動態的申請并調用,所以程序的運行環境中必須提供相應的庫。動態函數庫的改變并不影響你的程序,所以動態函數庫的升級比較方便。而且如果多個應用程序都要使用同一函數庫,動態庫就非常適合,可以減小應用程序的體積。
2.庫的制作
靜態庫的制作:
①準備相應操作的*.c文件,然后將*.c文件轉換至匯編文件*.o文件
②執行ar -cr libxxxx.a *.o文件? ? (解釋:-c---->表示create,創建;-r----->表示replace,替換;xxxx----->表示庫的名字)
③在編譯main.c程序文件時:gcc -o main? main.c -L. -lxxxx? ?(-L.------->表示選擇鏈接庫的路徑,此時切記-L后面的“.”表示當前目錄;)
④此時,鏈接靜態庫的程序就好了,此時刪去xxxx庫,對程序的執行也不會造成影響。
?
動態庫的建立
①準備相應操作的*.c文件,然后將*.c文件轉換至匯編文件*.o文件
②創建動態庫:gcc? -shared? -fpic? -o? libxxxx.so? *.o? (-shared------>表示動態庫(共享庫);-fpic--->產生位置無關代碼;xxxx------>表示動態庫的名字)
③編譯main.c文件:gcc -o dynamic dynamic.c -L. -lxxxx
④執行./dynamic? ?-------------------------------------會出錯!!!!!!!!!!!!(找不到運行時依賴的動態庫)
?
此時需要注意的是,我們現在還不能直接執行此程序,!!!!!!!!
我們需要在執行一步:export LD_LIBRARY_PATH="."? ?--------------------將當前目錄設置環境變量,負責程序將找不到運行時所需要的動態庫
完成此步,就可以執行了。
⑤再執行:./dynamic.? ?---------------------------------OK
轉載于:https://www.cnblogs.com/single-dont/p/11391328.html
總結
以上是生活随笔為你收集整理的linux下静态库和动态库的制作与使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新版本,新起点。
- 下一篇: Linux 关闭桌面方法