Linux下靜態庫生成和使用
Linux下靜態庫生成和使用
一.靜態庫概念1.庫是預編譯的目標文件(object ; ;files)的集合,它們可以被鏈接進程序。靜態庫以后綴為”.a”的特殊的存檔(archive ;file)存儲。2.標準系統庫可在目錄/usr。b與;b中找到。比如,在類Unix系統中C語言的數序庫一般存儲為文件/usr。b;bm.a。該庫中函數的原型聲明在頭文件/usr/include/math.h中。3.C標準庫本身存儲為/usr。b;bc.a,它包含ANS1/ISO標準指定的函數,比如printf。對每一個C程序來說,libc.a都默認被鏈接。4.一個事例:在tiger.c程序中調用一個數學庫libm.a中sin函數。
導讀一.靜態庫概念1.庫是預編譯的目標文件(object ; ;files)的集合,它們可以被鏈接進程序。靜態庫以后綴為”.a”的特殊的存檔(archive ;file)存儲。2.標準系統庫可在目錄/usr。b與;b中找到。比如,在類Unix系統中C語言的數序庫一般存儲為文件/usr。b;bm.a。該庫中函數的原型聲明在頭文件/usr/include/math.h中。3.C標準庫本身存儲為/usr。b;bc.a,它包含ANS1/ISO標準指定的函數,比如printf。對每一個C程序來說,libc.a都默認被鏈接。4.一個事例:在tiger.c程序中調用一個數學庫libm.a中sin函數。
![](https://img.51dongshi.com/20250105/wz/18528797452.jpg)
系統大全為您提供一.靜態庫概念1.庫是預編譯的目標文件(object??files)的集合,它們可以被鏈接進程序。靜態庫以后綴為”.a”的特殊的存檔(archive?file)存儲。2.標準系統庫可在目錄/usrb與b中找到。比如,在類Unix系統中C語言的數序庫一般存儲為文件/usrbbm.a。該庫中函數的原型聲明在頭文件/usr/include/math.h中。3.C標準庫本身存儲為/usrbbc.a,它包含ANS1/ISO標準指定的函數,比如printf。對每一個C程序來說,libc.a都默認被鏈接。4.一個事例:在tiger.c程序中調用一個數學庫libm.a中sin函數。#include
#includeint??main(){?????????double??x?=?2.0;?????????double?y?=?sin(x);?????????printf(“the?result:%f”,y);?????????return?0;}?如果直接使用gcc?tiger.c則會出現錯誤:undefined??reference?to?‘sin’;1>函數sin(),未在本程序中定義也不在默認庫’libc.a’中,除非被指定,編譯器也不會鏈接’libm.a’。2>為使編譯器能將sin()鏈接進主程序‘test.c’,需要提供數學庫’libm.a’.。3>使用方法:gcc??tiger.c?/usrbbm.a??-o?tiger則可以編譯通過。為了避免在命令行中指定長的路徑,編譯器為鏈接函數庫提供了快捷的選項“-l”。因此可以使用下面的方法:gcc??tiger.c?-lm?–o?tiger注:選項-lNAME使用連接器嘗試鏈接系統庫目錄中的函數庫文件libNAME.a。?二.生成和使用靜態庫1.靜態庫是obj文件的一個集合,通常靜態庫以”.a”為后綴。靜態庫由程序ar生成。2.靜態庫的優點是可以在不用重新編譯程序庫代碼的情況下,進行程序的重新鏈接,這種方法節省了編譯過程的時間(在編譯大型程序的時候,需要花費很長的時間)。靜態庫的另一個優點是開發者可以提供庫文件給使用的人員,不用開放源代碼,這是庫函數提供者經常采用的手段。3.通過一個實例來了解如何自己生成靜態庫和使用靜態庫首先生成靜態庫1>在test文件夾下有三個文件:main.c?,tiger.c,tiger.h;a.?main.c文件中的內容:#include#include”tiger.h”?????//注意include該文件,并不是僅鏈入.a文件即可int??main(void){???????printf(“sum=%d”,add(3,5));???????return?0;???????}b.tiger.h文件中的內容:#ifndef?__TIGER__#define?__TIGER__int??add(int??a,int?b);#endifc.tiger.c文件中的內容int??add(int??a,int?b){????????return?a+b;}2>創建靜態庫的最基本步驟是生成目標文件tiger.ogcc??-o?tiger.o??-c??tiger.c3>然后生成靜態庫libadd.a:ar??-rcs?libadd.a??tiger.o????其次使用靜態庫1>使用gcc命令帶上庫文件就OK了???gcc??-o??main?main.c??libadd.a2>?也可以使用命令”-l庫名”進行,庫名是不包含庫函數庫和擴展名的字符串。???gcc??-o??main??main.c?-ladd上面的命令執行完后,系統返回:Cannot??find?–ladd說明:上面的命令將在系統默認的路徑西安查找add函數庫,并把他鏈接到要生成的目標程序上。系統提示沒有找到庫文件add,這是由于add庫函數沒有在系統默認的查找路徑下,我們需要認為指定庫函數的路徑,例如:庫文件和當前編譯文件在同一目錄下:????gcc??-o?main??main.c?-L??./??-ladd系統就能正常生成可執行文件。說明:???????在使用-l選項時,-o選項的目的名要在-l鏈接的庫名之前,否則gcc會認為-l是生成的目標而出錯。????以上就是系統大全給大家介紹的如何使的方法都有一定的了解了吧,好了,如果大家還想了解更多的資訊,那就趕緊點擊系統大全官網吧。??本文來自系統大全http:///如需轉載請注明!推薦:win7純凈版
Linux下靜態庫生成和使用
一.靜態庫概念1.庫是預編譯的目標文件(object ; ;files)的集合,它們可以被鏈接進程序。靜態庫以后綴為”.a”的特殊的存檔(archive ;file)存儲。2.標準系統庫可在目錄/usr。b與;b中找到。比如,在類Unix系統中C語言的數序庫一般存儲為文件/usr。b;bm.a。該庫中函數的原型聲明在頭文件/usr/include/math.h中。3.C標準庫本身存儲為/usr。b;bc.a,它包含ANS1/ISO標準指定的函數,比如printf。對每一個C程序來說,libc.a都默認被鏈接。4.一個事例:在tiger.c程序中調用一個數學庫libm.a中sin函數。
為你推薦