linux c下的c文件 h文件 o文件 so文件 a文件 可執行文件 gcc使用


linux下c語言工程:

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

h文件:每個c文件都跟着一個h文件,h文件的作用是放着c文件中函數的聲明,結構體的定義,宏的定義等。

o文件:目標文件。每個文件經過編譯都會形成一個目標文件(二進制文件),多個目標文件鏈接后才能形成可執行文件。

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

可執行文件:

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

gcc  a.c b.c c.c -o run  將c文件編譯后鏈接,生成可執行文件

gcc a.o b.o c.o -o run   將目標文件鏈接為可執行文件

 

a文件:將o文件打包生成的靜態庫。

 

so文件:形成動態庫,當程序運行的時候才加載進來。

生成so文件:gcc a.c b.c c.c -fpic  -shared -o  librun.so

.o文件
.o文件是源碼編譯出的二進制文件。
你先得了解從源代碼到可執行文件的過程。以一個簡單的add函數源文件為例。

int add(int a,int b)
{
    return a+b;
}

 


先預處理為.i文件
gcc -E add.c -o add.i
再編譯為匯編文件
gcc -S add.i -o add.s
再匯編為二進制的.o文件
gcc -c add.s -o add.o

好,現在.o文件出來了。它就是C/C++編譯的產物,因為C/C++編譯的單元編譯。每一個.c/.cpp文件就是一個編譯單元,把所有單元都編譯好之后,再連接成一個完成的程序。

.a文件
.a文件實質上就是.o文件打了個包。一般把它叫做靜態庫文件。它在使用的時候,效果和使用.o文件是一樣的。

.so文件
.so文件就不一樣了,它不是簡單的.o文件打了一個包,它是一個ELF格式的文件,也就是linux的可執行文件。
.so文件可以用於多個進程的共享使用(位置無關的才行),所以又叫共享庫文件。程序在使用它的時候,會在運行時把它映射到自己進程空間的某一處,其不在使用它的程序中。
————————————————
版權聲明:本文為CSDN博主「wbx9011」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/a879365197/article/details/72933916


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM