C語言 使用庫和手動匯入c原始檔的區別

2021-08-26 11:59:11 字數 940 閱讀 8638

之前編寫一類功能,封裝fun.c fun.h檔案放在同乙個目錄下面,然後在mian.c檔案裡 include "fun.h"。以為這樣就叫做使用庫,其實不然。這樣的方式僅僅編寫了庫的原始碼,而沒有生成庫檔案。什麼意思呢?

如果僅編寫原始碼,然後引用。這樣只相當於是把原始碼複製大man.c檔案中,把所有**鏈結到了一起。實際上效率沒有提高。

如果將庫的原始碼生成庫檔案(有靜態庫和動態庫兩種區別),然後再編譯時引用,這樣提高了**的復用,效率也提公升了。另外乙個使用庫的好處是,安全。因為庫生成之後,不重新生成,它不變;而引用原始碼,稍加不注意,把原始碼改了,你的**就出問題了。

為什麼說,include 是引用庫,而 include "***.h"不是呢?

通常引用官方庫(c庫),這個會去鏈結c標準庫,比較特殊。它自動給鏈結,而不用手動。

linux - gcc靜態庫和動態庫的建立過程

靜態庫 

在鏈結時,複製**段。執行時無需載入。故執行速度快;但是占用空間大。

gcc -c hello.c -wall 正常編譯庫

ar crs libhello.a hello.o 建立靜態庫

gcc -o test test.c -l. -lhello 編譯時引用靜態庫(主c原始檔裡要進行函式宣告)

動態庫不占用庫中**段的大小,且可以多個程序共享乙個庫;執行時需要動態載入。好處是,更新方便。

gcc -c -fpic hello.c bye.c -wall 編譯庫時要使用 -fpic 《程式無關 引數》

gcc -shared -o libcommon.so.1 hello.o bye.o 建立動態庫

ln -s libcommon.so.1 libcommon.so 新增軟鏈結

gcc -o test test.c -l. -lcommon 編譯時引用動態庫(主c原始檔裡要進行函式宣告)

C 原始檔包含C原始檔(C 中如何使用C)

如下 c語言標頭檔案 max.h ifndef max h define max h int max int na,int nb endif c語言實現檔案 max.c include max.h int max int na,int nb c 語言呼叫檔案 include max.h int tm...

C語言 大程式( c和 h)標頭檔案和原始檔

定義 產生 宣告 不產生 include include int max int a,int b 宣告 int main int max int a,int b 定義 這個是改良後的版本 main.c include 僅僅宣告了這個函式的型別 include 庫函式每次編譯都會使用,標頭檔案中的宣告...

C語言中的原始檔和include 檔案

一 原始檔如何根據 include來關聯標頭檔案 1,系統自帶的標頭檔案用尖括號括起來,這樣編譯器會在系統檔案目錄下查詢。include 2,使用者自定義的檔案用雙引號括起來,編譯器首先會在使用者目錄下查詢,然後在到c 安裝目錄 比如vc中可以指定和修改庫檔案查詢路徑,unix和linux中可以通過...