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
