歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下靜態庫生成和使用

Linux下靜態庫生成和使用

日期:2017/3/1 10:20:47   编辑:Linux編程

Linux下靜態庫生成和使用

一.靜態庫概念

1.庫是預編譯的目標文件(object files)的集合,它們可以被鏈接進程序。靜態庫以後綴為”.a”的特殊的存檔(archive file)存儲。

2.標准系統庫可在目錄/usr/lib與/lib中找到。比如,在類Unix系統中C語言的數序庫一般存儲為文件/usr/lib/libm.a。該庫中函數的原型聲明在頭文件/usr/include/math.h中。

3.C標准庫本身存儲為/usr/lib/libc.a,它包含ANS1/ISO標准指定的函數,比如printf。對每一個C程序來說,libc.a都默認被鏈接。

4.一個事例:

在程序中調用一個數序庫libm.a中sin函數。

#include<stdio.h>

#include<math.h>

int main()

{

double x = 2.0;

double y = sin(x);

printf(“the result:%f\n”,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 /usr/lib/libm.a -o tiger

則可以編譯通過。為了避免在命令行中指定長的路徑,編譯器為鏈接函數庫提供了快捷的選項’-l’。因此可以使用下面的方法:

gcc tiger.c -lm –o tiger

注:選項-lNAME使用連接器嘗試鏈接系統庫目錄中的函數庫文件libNAME.a。

Copyright © Linux教程網 All Rights Reserved