庫本質上是一種可執行的二進位制**,可以被作業系統載入(linux和windows的庫是不相容的)。庫可以分為靜態塊和動態庫,二者的不同點在於**被載入的時刻不同。
靜態庫:在程式編譯時會被連線到目標**中,程式執行時不再需要改靜態庫,體積較大,一般應用與移植過程中在宿主機上編譯的**。靜態庫檔名的命名規範是以lib為字首,緊接著跟靜態庫名,擴充套件名為.a。
建立靜態庫,ar crs libtest.a test.o 建立靜態庫用ar命令,它將很多.o轉換成.a
使用靜態庫,gcc main.c -o test -l -ltest
動態庫:在程式編譯時並不會連線到目標**中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫在,因此**體積小,一般應用與應用程式中,可以節省空間。動態庫的命名規範是lib為字首緊接著動態庫名,擴充套件名為.so。
動態庫定位共享庫檔案方法:
1、把庫拷貝到/usr/lib和/lib目錄下
2、在ld_library_path環境變數中加上庫所在路徑
3、新增/etc/ld.so.conf.d/*.conf檔案,把庫所在的路徑加到檔案末尾,並執行ldconfig重新整理。這種方式,加入到目錄下的所有庫檔案都可見。
靜態庫與動態庫
linux下靜態庫 a 的例子 mylib.h 位於include資料夾下 ifndef mylib h define mylib h int add int a,int b endif mylib.cpp 位於lib資料夾中 include mylib.h int add int a,int b ...
靜態庫與動態庫
1.靜態庫 工程在呼叫靜態庫時,複製靜態庫,源 加長,不節省程式空間。字尾名.a 優點 程式設計後不需要再依賴庫 以空間換時間 建立靜態庫 gcc c 原始檔.c ar rcs rcu 靜態庫名 目標檔案1 目標檔案2 rc 靜態庫不存在,就建立該庫檔案 s 更新靜態庫 使用 gcc o file ...
靜態庫與動態庫
編譯系統在編譯的過程中,將所有相關的目標模組打包成乙個單獨的檔案,稱為靜態庫 static library 它可以用做鏈結器的輸入。當鏈結器構造乙個輸出的可執行檔案時,它只拷貝靜態庫里被應用程式引用的目標模組。在unix系統中,靜態庫以一種稱為存檔 archive 的特殊檔案格式存放在磁碟中。存檔檔...