當前位置:首頁 > 公眾號精選 > 嵌入式云IOT技術圈
[導讀]靜態(tài)庫 .o文件的集合 ? 制作? ar -cr libxxx.a? xxx1.o xxx2.o xxx3.o ... ? 編譯? gcc main.c -l xxx [-L 庫路徑] (如果不加-L則在標準庫路徑下查找) ? 運行? ./a.out ? 基本概念: 靜態(tài)庫又稱為文檔文件(Archive File)。它是多個.o文件的集合。Linux中靜

靜態(tài)庫 .o文件的集合

制作  ar -cr libxxx.a  xxx1.o xxx2.o xxx3.o ...

編譯  gcc main.c -l xxx [-L 庫路徑] (如果不加-L則在標準庫路徑下查找)

運行  ./a.out


基本概念:

靜態(tài)庫又稱為文檔文件(Archive File)。它是多個.o文件的集合。Linux中靜態(tài)庫文件的后綴為"a"。

靜態(tài)庫的代碼在編譯時就已經鏈接到應用程序中

靜態(tài)庫中的各個成員(.o文件)沒有特殊的存在格式,僅僅是一個.o文件的集合。

使用"ar"工具維護和管理靜態(tài)庫


ar的三個參數(shù)中:r代表將文件插入歸檔文件中,c代表建立歸檔文件,s代表若歸檔文件中包含了對象模式,可利用此參數(shù)建立備存文件的符號表。

lib和.a都是系統(tǒng)指定的靜態(tài)庫文件的固定格式,mylib才是靜態(tài)庫的名稱,

編譯時,鏈接器會在標準路徑(/usr/lib;/lib)或者用戶指定的路徑下去找.a的文件。


gcc -o main main.c -static -L. –lmylib

-static指定編譯器鏈接靜態(tài)庫,-L.指定靜態(tài)庫的路徑為當前路徑,

在gcc編譯器中引用可搜索到的目錄和庫文件時需用(-l+庫名),

如在gcc中加入-lm可以在程序匯中鏈接標準算術庫,加上-lpthread可以鏈接到linux標準線程庫



總結:

使用靜態(tài)庫可以使程序不依賴于任何其他庫而獨立運行,但是會占用很多內存空間以及磁盤空間,

而且如果庫文件更新,則需重新編譯源代碼,使用起來不夠靈活.其實,編譯的時候不需要加-static,

直接用gcc -o main main.c -L. –lmylib,連接器會為我們鏈接指定的靜態(tài)庫以及標準C的共享庫。


============================================

動態(tài)庫 并不包含在可執(zhí)行文件中 在執(zhí)行時才加載動態(tài)庫

制作  gcc -shared -fPIC xxx.c -o libxxx.so

編譯  gcc main.c -l xxx [-L 編譯時庫路徑]

臨時指定運行時的庫查找路徑  [LD_LIBRARY_PATH=(運行時庫路徑)] ./a.out

如果不指定則在標準路徑下找

當你發(fā)布庫要標準路徑“/usr/lib  或 /lib”就不需要其它操作,但

gcc 時一定要加“-l”指定的庫名



永久修改運行時的庫查找路徑

/etc/ld.so.conf   修改連接器的配置文件

ldconfig          使配置文件生效



3、編譯參數(shù)解析

最主要的是GCC命令行的一個選項:

-shared 該選項指定生成動態(tài)連接庫(讓連接器生成T類型的導出符號表,有時候也生成弱連接W類型的導出符號),不用該標志外部程序無法連接。相當于一個可執(zhí)行文件



-fPIC:表示編譯為位置獨立的代碼,不用此選項的話編譯后的代碼是位置相關的所以動態(tài)載入時是通過代碼拷貝的方式來滿足不同進程的需要,而不能達到真正代碼段共享的目的。



-L.:表示要連接的庫在當前目錄中



-ltest:編譯器查找動態(tài)連接庫時有隱含的命名規(guī)則,即在給出的名字前面加上lib,后面加上.so來確定庫的名稱



LD_LIBRARY_PATH:這個環(huán)境變量指示動態(tài)連接器可以裝載動態(tài)庫的路徑。



當然如果有root權限的話,可以修改/etc/ld.so.conf文件,然后調用 /sbin/ldconfig來達到同樣的目的,

不過如果沒有root權限,那么只能采用輸出LD_LIBRARY_PATH的方法了。





免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉