日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式云IOT技術(shù)圈
[導(dǎo)讀]靜態(tài)庫 .o文件的集合 ? 制作? ar -cr libxxx.a? xxx1.o xxx2.o xxx3.o ... ? 編譯? gcc main.c -l xxx [-L 庫路徑] (如果不加-L則在標(biāo)準(zhǔn)庫路徑下查找) ? 運行? ./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則在標(biāo)準(zhǔn)庫路徑下查找)

運行  ./a.out


基本概念:

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

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

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

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


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

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

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


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

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

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

如在gcc中加入-lm可以在程序匯中鏈接標(biāo)準(zhǔn)算術(shù)庫,加上-lpthread可以鏈接到linux標(biāo)準(zhǔn)線程庫



總結(jié):

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

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

直接用gcc -o main main.c -L. –lmylib,連接器會為我們鏈接指定的靜態(tài)庫以及標(biāo)準(zhǔn)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

如果不指定則在標(biāo)準(zhǔn)路徑下找

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

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



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

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

ldconfig          使配置文件生效



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

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

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



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



-L.:表示要連接的庫在當(dāng)前目錄中



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



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



當(dāng)然如果有root權(quán)限的話,可以修改/etc/ld.so.conf文件,然后調(diào)用 /sbin/ldconfig來達(dá)到同樣的目的,

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





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

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

在Zynq MPSoC開發(fā)中,實現(xiàn)PS端Linux與PL端自定義IP核的AXI互聯(lián)是構(gòu)建高性能異構(gòu)系統(tǒng)的關(guān)鍵環(huán)節(jié)。這種互聯(lián)方式充分發(fā)揮了ARM處理器的軟件優(yōu)勢與FPGA的硬件加速能力,為復(fù)雜應(yīng)用提供了強大的計算平臺。

關(guān)鍵字: Zynq MPSoC Linux

在物聯(lián)網(wǎng)與智能設(shè)備飛速普及的當(dāng)下,嵌入式系統(tǒng)的安全性與穩(wěn)定性愈發(fā)關(guān)鍵。實時操作系統(tǒng)(RTOS)憑借其高確定性、低延遲的特性,成為工業(yè)控制、醫(yī)療設(shè)備、航空電子等安全敏感領(lǐng)域的核心支撐。而內(nèi)存保護(hù)單元(MPU)作為硬件級安全...

關(guān)鍵字: Linux Windows

3月10日消息,2026年開年,一個名為OpenClaw的開源項目以閃電般的速度席卷了GitHub。它在短短一天內(nèi)就斬獲了9000顆星

關(guān)鍵字: OpenClaw Linux

3月6日消息,在摩根士丹利會議上,NVIDIA CEO黃仁勛分享了關(guān)于Agentic AI(代理式人工智能)轉(zhuǎn)折點的見解,并將開源軟件OpenClaw評價為“當(dāng)代最重磅的軟件發(fā)布”。

關(guān)鍵字: OpenClaw Linux

Linux內(nèi)存管理是操作系統(tǒng)的核心機制之一,通過虛擬內(nèi)存與物理內(nèi)存的分離設(shè)計,實現(xiàn)了多進(jìn)程內(nèi)存隔離、高效資源利用和系統(tǒng)穩(wěn)定性保障。

關(guān)鍵字: Linux 內(nèi)存

在Linux系統(tǒng)中,進(jìn)程管理是內(nèi)核的核心功能之一,其核心目標(biāo)是通過高效的調(diào)度機制和進(jìn)程切換技術(shù),實現(xiàn)多任務(wù)并發(fā)執(zhí)行。

關(guān)鍵字: Linux CPU

內(nèi)核是操作系統(tǒng)的核心,它作為應(yīng)用程序與硬件設(shè)備之間的"中間人",負(fù)責(zé)進(jìn)程調(diào)度、內(nèi)存管理、硬件通信和系統(tǒng)調(diào)用等關(guān)鍵功能。Linux和Windows作為全球使用最廣泛的兩大操作系統(tǒng),其內(nèi)核設(shè)計理念、架構(gòu)和運行機制存在本質(zhì)差異...

關(guān)鍵字: Linux Windows

在Linux系統(tǒng)中,當(dāng)開發(fā)者使用mmap()系統(tǒng)調(diào)用將磁盤文件映射到進(jìn)程的虛擬地址空間時,一個看似簡單的指針操作背后,隱藏著操作系統(tǒng)內(nèi)核與硬件協(xié)同工作的復(fù)雜機制。這種機制不僅突破了傳統(tǒng)文件IO的效率瓶頸,更重新定義了內(nèi)存...

關(guān)鍵字: Linux 文件IO 內(nèi)存映射

在Linux驅(qū)動開發(fā)領(lǐng)域,持續(xù)集成與持續(xù)部署(CI/CD)流水線通過自動化流程將代碼變更快速轉(zhuǎn)化為可靠部署,而KernelCI與LTP測試套件的深度集成則成為保障驅(qū)動穩(wěn)定性的關(guān)鍵技術(shù)組合。本文將從原理分析、應(yīng)用場景及實現(xiàn)...

關(guān)鍵字: CICD流水線 Linux

在Linux系統(tǒng)中,動態(tài)庫(共享庫)是程序運行的重要組成部分。當(dāng)程序需要調(diào)用動態(tài)庫時,系統(tǒng)必須能夠找到這些庫文件的位置。

關(guān)鍵字: 動態(tài)庫 Linux
關(guān)閉