溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

linux下c語言工程so文件的示例分析

發(fā)布時(shí)間:2021-03-09 13:03:27 來源:億速云 閱讀:241 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)linux下c語言工程so文件的示例分析的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

  linuxc下的c文件h文件o文件so文件a文件可執(zhí)行文件gcc使用。so文件可以用于多個(gè)進(jìn)程的共享使用(位置無關(guān)的才行),所以又叫共享庫文件。程序在使用它的時(shí)候,會(huì)在運(yùn)行時(shí)把它映射到自己進(jìn)程空間的某一處,其不在使用它的程序中。

  linux下c語言工程so文件:

  c文件:主要每個(gè)模塊的原代碼都在c文件中。

  h文件:每個(gè)c文件都跟著一個(gè)h文件,h文件的作用是放著c文件中函數(shù)的聲明,結(jié)構(gòu)體的定義,宏的定義等。

  o文件:目標(biāo)文件。每個(gè)文件經(jīng)過編譯都會(huì)形成一個(gè)目標(biāo)文件(二進(jìn)制文件),多個(gè)目標(biāo)文件鏈接后才能形成可執(zhí)行文件。

  o文件如何形成:gcc-ca.c

  可執(zhí)行文件:

  不論是c文件還是o文件,都是無法執(zhí)行的,最終還要生成可執(zhí)行的文件。

  gcc a.cb.cc.c-orun 將c文件編譯后鏈接,生成可執(zhí)行文件

  gcca.ob.oc.o-orun 將目標(biāo)文件鏈接為可執(zhí)行文件

  a文件:將o文件打包生成的靜態(tài)庫。

  生成so文件

  so文件:形成動(dòng)態(tài)庫,當(dāng)程序運(yùn)行的時(shí)候才加載進(jìn)來。

  生成so文件:gcca.cb.cc.c-fpic -shared-o librun.so

  .o文件

  .o文件是源碼編譯出的二進(jìn)制文件。

  你先得了解從源代碼到可執(zhí)行文件的過程。以一個(gè)簡(jiǎn)單的add函數(shù)源文件為例。

  intadd(inta,intb)

  {

  returna+b;

  }

  先預(yù)處理為.i文件

  gcc-Eadd.c-oadd.i

  再編譯為匯編文件

  gcc-Sadd.i-oadd.s

  再匯編為二進(jìn)制的.o文件

  gcc-cadd.s-oadd.o

  好,現(xiàn)在.o文件出來了。它就是C/C++編譯的產(chǎn)物,因?yàn)镃/C++編譯的單元編譯。每一個(gè).c/.cpp文件就是一個(gè)編譯單元,把所有單元都編譯好之后,再連接成一個(gè)完成的程序。

  .a文件

  .a文件實(shí)質(zhì)上就是.o文件打了個(gè)包。一般把它叫做靜態(tài)庫文件。它在使用的時(shí)候,效果和使用.o文件是一樣的。

  .so文件

  .so文件就不一樣了,它不是簡(jiǎn)單的.o文件打了一個(gè)包,它是一個(gè)ELF格式的文件,也就是linux的可執(zhí)行文件。

感謝各位的閱讀!關(guān)于“l(fā)inux下c語言工程so文件的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI