linux作業系統下編譯靜態庫與動態庫

來源:互聯網
上載者:User
linux作業系統下編譯靜態庫與動態庫    linux的庫檔案分為兩種,一種是靜態庫(*.a檔案,相當於Windows下的*.lib檔案),另一種是動態庫(*.so檔案,相當於Windows下的*.dll檔案)。編譯時間,一種就是把自己編譯的.o檔案(相當於Windows下的.obj檔案)和靜態庫一起連結成可執行檔,另一種就是只編譯.o檔案,當運行時,調用動態庫中的函數時,再載入動態庫。    編譯方法如下:    1. 靜態庫    假如源檔案件為:main.c, mystatic.c。    1) 將mystatic.c編譯成靜態庫libmystatic.a,在main.c中調用此庫中的函數。        gcc -c -I inlcude -o mystaic.o mystatic.c // 將mystatic.c編譯成目標檔案mystatic.o        ar -rs lib/libmystaic.a mystatic.o // 將目標mystaic.o加入libmystatic.a庫中(庫檔案需以lib開頭),如果libmystatic.a不存在建立此庫    2) 再將main.c編譯成可執行檔test。        gcc -I include -L lib -o test main.c -lmystatic -static    則編譯成功,在檔案夾lib下成功產生libmystatic.a的庫檔案,並編出的可執行程式test運用了庫libmystatic.a    2. 動態庫    源檔案件為:main.c, mydynamic.c。    1) 將mydynamic.c編譯成動態庫libmydynamic.so,在main.c中調用了此庫中的函數。        gcc -I include -shared -o lib/libmydynamic.so mydynamic.c // 庫檔案需以lib開頭    2) 將main.c編譯成可執行檔test。        gcc -I include -L lib -o test main.c -lmydynamic // 不帶參數-static,預設為動態編譯    3) 運行可執行程式test。        在運行程式test時,系統會在系統預設的庫檔案目錄下搜尋mydynamic.so,如果找不到運行失敗。需將剛才編譯的動態庫目錄加入系統,具體方法如下:        修改~/.bash_profile(此檔案為隱藏檔案,用ls -a ~/可將其顯示出來)檔案,在檔案末尾加入:        LD_LIBRARY_PATH=*** #(***為libmydynamic.so所在的目錄)        export LD_LIBRARY_PATH        重新登入系統,運行可執行檔test檔案將會成功。 

3.編譯時間要使用共用庫dl 其中有dlopen dlsynm dlerror dlclose 函數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.