欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

linuxar命令用法,Linux命令詳解

linux靜態(tài)庫和共享庫的區(qū)別

linux庫有動態(tài)與靜態(tài)兩種,動態(tài)通常用.so為后綴,靜態(tài)用.a為后綴。例如:libhello.so

在宜賓等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站設計 網(wǎng)站設計制作按需求定制開發(fā),公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,成都品牌網(wǎng)站建設,全網(wǎng)營銷推廣,成都外貿網(wǎng)站建設,宜賓網(wǎng)站建設費用合理。

libhello.a

為了在同一系統(tǒng)中使用不同版本的庫,可以在庫文件名后加上版本號為后綴,例如:

libhello.so.1.0,由于程序連接默認以.so為文件后綴名。所以為了使用這些庫,通常使用建立符號連接的方式。

ln

-s

libhello.so.1.0

libhello.so.1

ln

-s

libhello.so.1

libhello.so

動態(tài)庫和靜態(tài)庫的區(qū)別:

當要使用靜態(tài)的程序庫時,連接器會找出程序所需的函數(shù),然后將它們拷貝到執(zhí)行文件,由于這種拷貝是完整的,所以一旦連接成功,靜態(tài)程序庫也就不再需要了。然而,對動態(tài)庫而言,就不是這樣。動態(tài)庫會在執(zhí)行程序內留下一個標記‘指明當程序執(zhí)行時,首先必須載入這個庫。由于動態(tài)庫節(jié)省空間,linux下進行連接的缺省操作是首先連接動態(tài)庫,也就是說,如果同時存在靜態(tài)和動態(tài)庫,不特別指定的話,將與動態(tài)庫相連接。

兩種庫的編譯產(chǎn)生方法:

第一步要把源代碼編繹成目標代碼。以下面的代碼hello.c為例,生成hello庫:

/*

hello.c

*/

#include

void

sayhello()

{

printf("hello,world\n");

}

用gcc編繹該文件,在編繹時可以使用任何全法的編繹參數(shù),例如-g加入調試代碼等:

gcc

-c

hello.c

-o

hello.o

1.連接成靜態(tài)庫

連接成靜態(tài)庫使用ar命令,其實ar是archive的意思

$ar

cqs

libhello.a

hello.o

2.連接成動態(tài)庫

生成動態(tài)庫用gcc來完成,由于可能存在多個版本,因此通常指定版本號:

$gcc

-shared

-wl,-soname,libhello.so.1

-o

libhello.so.1.0

hello.o

另外再建立兩個符號連接:

$ln

-s

libhello.so.1.0

libhello.so.1

$ln

-s

libhello.so.1

libhello.so

這樣一個libhello的動態(tài)連接庫就生成了。最重要的是傳gcc

-shared

參數(shù)使其生成是動態(tài)庫而不是普通執(zhí)行程序。

-wl

表示后面的參數(shù)也就是-soname,libhello.so.1直接傳給連接器ld進行處理。實際上,每一個庫都有一個soname,當連接器發(fā)現(xiàn)它正在查找的程序庫中有這樣一個名稱,連接器便會將soname嵌入連結中的二進制文件內,而不是它正在運行的實際文件名,在程序執(zhí)行期間,程序會查找擁有

soname名字的文件,%b

Linux makefile&shell的一個問題

ar 命令是用來將若干 .o 文件打包成(靜態(tài))庫文件。 按照習慣,庫文件后綴名都是 .a

crv 分別是 ar 命令的三個參數(shù),cr的意思是創(chuàng)建指定.a文件(如果不存在),并將.o文件加入到這個.a文件中。 v 的意思是讓 ar 命令在執(zhí)行的時候打印更多的提示信息。

ar crv abc.a $(OBJ) 就是將 abc.o 打包到庫文件 abc.a 中的意思。

更多信息可以 man ar 來看到。

怎樣用ar命令將庫文件釋放到指定路徑下

用途說明

創(chuàng)建靜態(tài)庫。a文件。用C/C++開發(fā)程序時經(jīng)常用到,但我很少單獨在命令行中使用ar命令,一般寫在makefile中,有時也會在shell腳 本中用到。關于Linux下的庫文件、靜態(tài)庫、動態(tài)庫以及怎樣創(chuàng)建和使用等相關知識,參見本文后面的相關資料【3】《關于Linux靜態(tài)庫和動態(tài)庫的分析》。

常用參數(shù)

格式:ar rcs libxxx.a xx1.o xx2.o

參數(shù)r:在庫中插入模塊(替換)。當插入的模塊名已經(jīng)在庫中存在,則替換同名的模塊。如果若干模塊中有一個模塊在庫中不存在,ar顯示一個錯誤消息,并不替換其他同名模塊。默認的情況下,新的成員增加在庫的結尾處,可以使用其他任選項來改變增加的位置。【1】

參數(shù)c:創(chuàng)建一個庫。不管庫是否存在,都將創(chuàng)建。

參數(shù)s:創(chuàng)建目標文件索引,這在創(chuàng)建較大的庫時能加快時間。(補充:如果不需要創(chuàng)建索引,可改成大寫S參數(shù);如果。a文件缺少索引,可以使用ranlib命令添加)

格式:ar t libxxx.a

顯示庫文件中有哪些目標文件,只顯示名稱。

格式:ar tv libxxx.a

顯示庫文件中有哪些目標文件,顯示文件名、時間、大小等詳細信息。

格式:nm -s libxxx.a

顯示庫文件中的索引表。

格式:ranlib libxxx.a

為庫文件創(chuàng)建索引表。

使用示例

示例一 在shell腳本中使用

Bash代碼

OS=`uname -r`

ar rcs libhycu.a.$OS *.o

示例二 在makefile中使用

Makefile代碼

$(BIN1): $(BIN1_OBJS)

ar rcs $@ $^

示例三 創(chuàng)建并使用靜態(tài)庫

第一步:編輯源文件,test.h test.c main.c。其中main.c文件中包含main函數(shù),作為程序入口;test.c中包含main函數(shù)中需要用到的函數(shù)。

vi test.h test.c main.c

第二步:將test.c編譯成目標文件。

gcc -c test.c

如果test.c無誤,就會得到test.o這個目標文件。

第三步:由。o文件創(chuàng)建靜態(tài)庫。

ar rcs libtest.a test.o

第四步:在程序中使用靜態(tài)庫。

gcc -o main main.c -L. -ltest

因為是靜態(tài)編譯,生成的執(zhí)行文件可以獨立于。a文件運行。

第五步:執(zhí)行。

./main

示例四 創(chuàng)建并使用動態(tài)庫

第一步:編輯源文件,test.h test.c main.c。其中main.c文件中包含main函數(shù),作為程序入口;test.c中包含main函數(shù)中需要用到的函數(shù)。

vi test.h test.c main.c

第二步:將test.c編譯成目標文件。

gcc -c test.c

前面兩步與創(chuàng)建靜態(tài)庫一致。

第三步:由。o文件創(chuàng)建動態(tài)庫文件。

gcc -shared -fPIC -o libtest.so test.o

第四步:在程序中使用動態(tài)庫。

gcc -o main main.c -L. -ltest

當靜態(tài)庫和動態(tài)庫同名時,gcc命令將優(yōu)先使用動態(tài)庫。

第五步:執(zhí)行。

LD_LIBRARY_PATH=. ./main

示例五 查看靜態(tài)庫中的文件

[root@node56 lib]# ar -t libhycu.a

base64.c.o

binbuf.c.o

cache.c.o

chunk.c.o

codec_a.c.o

xort.c.o

[root@node56 lib]#

[root@node56 lib]# ar -tv libhycu.a

rw-r--r-- 0/0 7220 Jul 29 19:18 2011 base64.c.o

rw-r--r-- 0/0 2752 Jul 29 19:18 2011 binbuf.c.o

rw-r--r-- 0/0 19768 Jul 29 19:18 2011 cache.c.o

rw-r--r-- 0/0 4580 Jul 29 19:18 2011 xort.c.o

[root@node56 lib]#

[root@node56 lib]# nm -s libhycu.a | less

Archive index:

Base64Enc in base64.c.o

GetBase64Value in base64.c.o

Base64Dec in base64.c.o

encode64 in base64.c.o

decode64 in base64.c.o

check64 in base64.c.o

test64 in base64.c.o

chunk_alloc in chunk.c.o

[root@node56 lib]#

新聞名稱:linuxar命令用法,Linux命令詳解
瀏覽路徑:http://chinadenli.net/article43/dssphes.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版手機網(wǎng)站建設品牌網(wǎng)站制作域名注冊網(wǎng)頁設計公司

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化