日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下静态库和动态库的制作与使用

發布時間:2024/1/17 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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下静态库和动态库的制作与使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。