庫檔案編譯與介紹

2021-10-09 17:48:57 字數 1739 閱讀 9898

一句話概述:

將函式封裝起來,放在裡面,提供介面,供呼叫。

庫檔案可以說是程式設計師必須接觸的東西,我們常聽說庫,什麼編碼庫,xx庫啊等等,這些庫,其實它的前身仍然是**(跟我們平常寫的.c等等這些檔案差不多),只不過,它編譯生成的不再是程式(裡面沒有main),而只是類似於標頭檔案之類的,只提供介面,給別人呼叫。

好處:

①把常用的放在庫中,需要的就直接呼叫(可以新增標頭檔案來進行宣告,否則,會隱式宣告)

②把不想公開的**放在庫中,但是留出標頭檔案,給出介面,讓其他人使用。

怎麼編譯生成庫:

預備知識:

庫檔案包括動態庫,以及靜態庫。

動態庫是指編譯的時候不把這個庫檔案所需要的東西編譯進去,而是在執行的時候再到庫中尋找相應的內容;

靜態庫是指吧程式所需的函式從庫中拿出來,然後編譯程序式裡面,後續執行就不再需要庫了。

雙方各有好處,前者,明顯的好處就是程式檔案更小,而後者程式檔案比較大,但是,執行不需要其他的庫支援。

過程:(1).c檔案如下:

#include

void

print_hello()

.**件:

#ifndef __hello_h__

#define __hello_h

void

print_hello()

;//這個可用,也可不用,不用的話,就變成隱式宣告。

#endif

②gcc -c hello.c //這一步是為了生成目標檔案,但是,其實不需要它也行,不過,它是生成靜態庫與動態庫的中間狀態。

③ ar cr libmyhello.a hello.o //生成libmyhello.a 這麼乙個靜態庫,注意命名規則lib***.a

④編譯執行程式:gcc ***.c -o *** -l ./libmyhello.a // 呼叫方法1;

gcc ***.c -o *** -lmyhello //呼叫方法2,此時,需要-l後面自動補了,但是,需要放到裝置的lib環境變數中

執行程式:

#include

#include

"hello.h"

intmain()

動態庫:

①②同上;

③gcc -fpic -shared -o libmyfirstso.so myfirstso.c //生成了動態庫,注意命名規則;

④編譯執行程式:gcc ***.c -o *** -l ./libmyfirstso.so //方法1;

gcc ***.c -o *** -lmyfirstso //方法2,同上,需要放到裝置的lib環境變數中

當然,也可以將他們混合在一起編譯也行,如果是想指定路徑的話,直接指定即可,如:-l ./lib/libmyfirstso.so

總結:

庫檔案非常重要,有以下三點需要注意:

①需要了解的是靜態庫與動態庫的區別;

②需要掌握靜態庫的生成指令(ar cr libhello.a hello.o)、動態庫生成指令(gcc -fpic -shared -o libhelloso.so hello.o);

③需要掌握如何利用庫編譯執行程式(-l ./libhello.a ; -lhello)(兩種方法)

Linux庫檔案使用與編譯

介紹在linux下使用靜態庫 共享庫 動態庫的方法。共享庫 動態庫 usr lib usr local lib 首先在 ld library path 環境變數所設定的路徑下查詢 一般都沒有給此環境變數賦值 搜尋動態裝載器在 etc目錄下的快取檔案 etc ld.so.cache 此檔案由命令ldc...

庫檔案編譯

1 交叉編譯 在glog目錄下 configure host arm arago linux gnueabi prefix path 庫生成路徑 後在glog當前目錄的.lib下就會有.so的動態庫。注意 有的庫生成不僅需要執行上述命令,還需要 make install 來生成庫檔案。2 注意 編譯...

Linux編譯庫檔案

靜態庫檔名的命名規範是以lib為字首,緊接著跟靜態庫名,擴充套件名為.a,動態庫檔名命名規範和靜態庫檔名命名規範類,也是在動態庫名增加字首lib,但其擴充套件名為.so。1 動態庫 在linux下,使用gcc shared c o lib so可以編譯乙個動態庫,使用gcc yyy.c l l.就可...