国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux下靜態庫生成和使用

2024-06-28 13:25:03
字體:
來源:轉載
供稿:網友
linux下靜態庫生成和使用Linux下靜態庫生成和使用一.靜態庫概念

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

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.一個事例:

在tiger.c程序中調用一個數學庫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;}

如果直接使用gcctiger.c則會出現錯誤:

undefinedreferenceto‘sin’;

1>函數sin(),未在本程序中定義也不在默認庫’libc.a’中,除非被指定,編譯器也不會鏈接’libm.a’。

2>為使編譯器能將sin()鏈接進主程序‘test.c’,需要提供數學庫’libm.a’.。

3>使用方法:

gcctiger.c/usr/lib/libm.a-otiger

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

gcctiger.c-lm–otiger

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

二.生成和使用靜態庫

1.靜態庫是obj文件的一個集合,通常靜態庫以”.a”為后綴。靜態庫由程序ar生成。

2.靜態庫的優點是可以在不用重新編譯程序庫代碼的情況下,進行程序的重新鏈接,這種方法節省了編譯過程的時間(在編譯大型程序的時候,需要花費很長的時間)。靜態庫的另一個優點是開發者可以提供庫文件給使用的人員,不用開放源代碼,這是庫函數提供者經常采用的手段。

3.通過一個實例來了解如何自己生成靜態庫和使用靜態庫

首先生成靜態庫

1>在test文件夾下有三個文件:main.c,tiger.c,tiger.h;

a.main.c文件中的內容:

#include<stdio.h>#include”tiger.h”     //注意include該文件,并不是僅鏈入.a文件即可int  main(void){       printf(“sum=%d/n”,add(3,5));       return 0;       }

b.tiger.h文件中的內容:

#ifndef __TIGER__#define __TIGER__int  add(int  a,int b);#endif

c.tiger.c文件中的內容

int  add(int  a,int b){        return a+b;}

2>創建靜態庫的最基本步驟是生成目標文件tiger.o

gcc-otiger.o-ctiger.c

3>然后生成靜態庫libadd.a:

ar-rcslibadd.atiger.o

其次使用靜態庫

1>使用gcc命令帶上庫文件就OK了

gcc-omainmain.clibadd.a

2>也可以使用命令”-l庫名”進行,庫名是不包含庫函數庫和擴展名的字符串。

gcc-omainmain.c-ladd

上面的命令執行完后,系統返回:

Cannotfind–ladd

說明:上面的命令將在系統默認的路徑西安查找add函數庫,并把他鏈接到要生成的目標程序上。系統提示沒有找到庫文件add,這是由于add庫函數沒有在系統默認的查找路徑下,我們需要認為指定庫函數的路徑,例如:庫文件和當前編譯文件在同一目錄下: gcc-omainmain.c-L./-ladd

系統就能正常生成可執行文件。

說明:

在使用-l選項時,-o選項的目的名要在-l鏈接的庫名之前,否則gcc會認為-l是生成的目標而出錯。

原文地址:linux下靜態庫生成和使用


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沐川县| 贺兰县| 东山县| 友谊县| 巴南区| 兴城市| 土默特右旗| 桐城市| 临江市| 湟中县| 太康县| 邯郸市| 长海县| 仙游县| 乳山市| 罗田县| 廉江市| 中方县| 巫山县| 蒙阴县| 芷江| 南岸区| 丰镇市| 日土县| 炉霍县| 安吉县| 开原市| 周宁县| 宜城市| 陆良县| 读书| 集贤县| 平武县| 延川县| 岳池县| 右玉县| 博客| 大余县| 黄龙县| 沧源| 莱阳市|