亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

深入探討Linux靜態庫與動態庫的詳解(一看就懂)

2020-01-26 16:07:26
字體:
來源:轉載
供稿:網友
庫從本質上來說是一種可執行代碼的二進制格式,可以被載入內存中執行。庫分靜態庫和動態庫兩種。
一、靜態庫和動態庫的區別
1. 靜態函數庫
這類庫的名字一般是libxxx.a;利用靜態函數庫編譯成的文件比較大--空間,因為整個函數庫的所有數據都會被整合進目標代碼中,他的優點就顯而易見了,即編譯后的執行程序不需要外部的函數庫支持,因為所有使用的函數都已經被編譯進去了。當然這也會成為他的缺點,因為如果靜態函數庫改變了,那么你的程序必須重新編譯。
2. 動態函數庫
這類庫的名字一般是libxxx.so;相對于靜態函數庫,動態函數庫在編譯的時候并沒有被編譯進目標代碼中,你的程序執行到相關函數時才調用該函數庫里的相應函數,因此動態函數庫所產生的可執行文件比較小。由于函數庫沒有被整合進你的程序,而是程序運行時動態的申請并調用--時間,所以程序的運行環境中必須提供相應的庫。動態函數庫的改變并不影響你的程序,所以動態函數庫的升級/更新比較方便。
 
二、靜態庫

(一)簡單介紹
/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/usr/bin/arm-hismall-linux-gcc /
  main.c src/* -I./include -L./lib -lmpi -o main
    /opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/usr/bin/arm-hismall-linux-gcc 為交叉編譯工具鏈
    /為換行,表示下一行與當行為同一行,‘/'后面不能有空格
    main.c 為主函數
    src/* 為源文件
    -I后面接頭文件
    -L后面接庫文件路徑路徑
    -l后面接庫文件名,全名為libmpi.a
    .a為靜態庫

(二)編寫及使用靜態庫
(1)設計庫源碼 pr1.c、pr2.c 和 main.c
復制代碼 代碼如下:

[bill@billstone make_lib]$ cat pr1.c
#include <stdio.h>
void print1(void)
{
                printf("This is the first lib src!/n");
}
[bill@billstone make_lib]$ cat pr2.c
#include<stdio.h>
void print2(void)
{
                printf("This is the second src lib!/n");
}
[bill@billstone make_lib]$ cat main.c
int main(void)
{
                print1();
                print2();
                return 0;


(2)  編譯pr1.c、pr2.c 文件
復制代碼 代碼如下:

[bill@billstone make_lib]$ gcc -O -c pr1.c pr2.c
[bill@billstone make_lib]$ ls -l pr*.o
-rw-rw-r--        1 bill          bill                    804    4 月  15 11:11 pr1.o
-rw-rw-r--        1 bill          bill                    804    4 月  15 11:11 pr2.o

(3)  鏈接靜態庫
為了在編譯程序中正確找到庫文件,靜態庫必須按照 lib[name].a 的規則命名,如下例中[name]=pr.
ar參數意義:
r:在庫中插入模塊(替換)。當插入的模塊名已經在庫中存在,則替換同名的模塊。
s:寫入一個目標文件索引到庫中,或者更新一個存在的目標文件索引。
v:該選項用來顯示執行操作選項的附加信息。
t:顯示庫的模塊表清單。一般只顯示模塊名。
[bill@billstone make_lib]$ ar -rsv libpr.a pr1.o pr2.o
a - pr1.o
a - pr2.o
[bill@billstone make_lib]$ ar -t libpr.a
pr1.o
pr2.o
(4)  編譯鏈接選項
-L 及-l 參數放在后面.其中,-L 加載庫文件路徑,-l 指明庫文件名字.
[bill@billstone make_lib]$ gcc -o main main.c -L./ -lpr     //生成main
(5)執行目標程序
[bill@billstone make_lib]$ ./main
This is the first lib src!
This is the second src lib!

三、動態庫(隱式調用)
(1)設計庫代碼 
復制代碼 代碼如下:

[bill@billstone make_lib]$ cat pr1.c
#include <stdio.h>
int p = 2;
void print(){
                printf("%p:%d/n", &p, p);
                printf("This is the first dll src!/n");
}

(2)生成動態庫  xxx.so
復制代碼 代碼如下:

[bill@billstone make_lib]$ gcc -O -fpic -shared -o xxx.so pr1.c
[bill@billstone make_lib]$ ls -l *.so
-rwxrwxr-x        1 bill          bill                  6592    4 月  15 15:19 xxx.so

(3)動態庫的隱式調用 
復制代碼 代碼如下:

[bill@billstone make_lib]$ cat main.c
int main()
{
       print();
       return 0;
}
[bill@billstone make_lib]$ gcc -o main main.c ./xxx.so
[bill@billstone make_lib]$ ./main
0x97b5d4:2
this is the first lib src!


當動態庫的位置發生改變時,  程序將無法正常運行;  而動態庫取代靜態庫的好處之一則是通過更新動態庫而隨時升級庫的內容.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲激情自拍图| 日本老师69xxx| 亚洲曰本av电影| 亚洲欧美中文日韩在线| 亚洲人精品午夜在线观看| 91精品国产色综合| 91精品国产91久久| 欧美大片免费观看在线观看网站推荐| 成人乱人伦精品视频在线观看| 亚洲色图av在线| 亚洲bt欧美bt日本bt| 国产精品久久久久久久久久ktv| 亚洲日韩第一页| 亚洲欧美成人网| 久久综合久久美利坚合众国| 国产精品第1页| 高潮白浆女日韩av免费看| 91网站在线免费观看| 热久久99这里有精品| 亚洲自拍av在线| 麻豆国产va免费精品高清在线| 亚洲电影在线观看| 欧美国产极速在线| 欧美超级免费视 在线| 狠狠做深爱婷婷久久综合一区| 久久福利视频导航| 成人黄色片网站| 国语自产精品视频在线看抢先版图片| 91在线免费看网站| 一本色道久久综合狠狠躁篇的优点| 久久91精品国产91久久久| 久久久精品国产网站| 欧美日韩第一页| 久久久视频精品| 最新的欧美黄色| 日韩av免费观影| 爱福利视频一区| 精品综合久久久久久97| 国产精品久久久久久av福利| 亚洲国产天堂久久综合网| 国产成人精品电影| 精品久久久久久久久久久久久| 91高清免费视频| 国产精品一香蕉国产线看观看| 日韩精品在线免费播放| 国产不卡av在线免费观看| 日韩成人中文字幕在线观看| 欧美性猛xxx| 成人午夜激情网| 97视频在线观看成人| 国产在线不卡精品| 国产精品主播视频| 日韩大片免费观看视频播放| 亚洲视频一区二区| 97久久精品在线| 成人福利视频在线观看| 欧美日韩亚洲系列| 久久久久久久久91| 久久精品在线播放| 午夜伦理精品一区| 亚洲欧美激情视频| 国产精品三级在线| 欧美日韩国产一区中文午夜| 精品高清一区二区三区| 国产一区欧美二区三区| 91av在线免费观看| 欧美高清视频在线播放| 成人欧美一区二区三区在线湿哒哒| 日韩精品亚洲精品| 中文字幕少妇一区二区三区| 国产综合久久久久久| 日本精品一区二区三区在线| 国产精品大陆在线观看| 国产精品国产三级国产aⅴ9色| 欧美中文在线观看国产| 97在线观看免费高清| 日韩av三级在线观看| 精品少妇一区二区30p| 91av国产在线| 国产一区二区三区久久精品| 91夜夜未满十八勿入爽爽影院| 色爱av美腿丝袜综合粉嫩av| 国产97色在线|日韩| 久久精品青青大伊人av| 国产不卡av在线免费观看| 精品无码久久久久久国产| 欧美成人免费小视频| 亚洲精品欧美一区二区三区| 久久成人精品视频| 国产日产欧美a一级在线| 日本久久久久亚洲中字幕| 日韩一区视频在线| 欧美激情奇米色| 蜜臀久久99精品久久久久久宅男| 欧美成人黄色小视频| 久久久久久亚洲| 国产精品福利在线观看| 日韩精品免费综合视频在线播放| 亚洲国产婷婷香蕉久久久久久| 这里只有精品在线观看| 国产精品美女在线| 黄色一区二区在线观看| 亚洲精品一区二区网址| 91经典在线视频| 91九色单男在线观看| 欧美影院成年免费版| 国产欧美日韩91| 国产精品成人aaaaa网站| 欧美人交a欧美精品| 欧美亚洲一级片| 亚洲黄页视频免费观看| 成人有码视频在线播放| 亚洲欧美综合精品久久成人| 久久久97精品| 亚洲欧美精品suv| 中文字幕在线观看日韩| 91久久久久久久| 久久久久女教师免费一区| 国产精品久久久久久av| 国产自产女人91一区在线观看| 2019亚洲日韩新视频| 欧美日韩午夜激情| 久久国产一区二区三区| 欧美成人免费小视频| 国产狼人综合免费视频| 精品国产一区av| 欧美性黄网官网| 热久久美女精品天天吊色| 97在线免费视频| 日韩在线观看av| 国内揄拍国内精品少妇国语| 久久成人这里只有精品| 日韩精品久久久久久久玫瑰园| 亚洲精品欧美日韩专区| xxav国产精品美女主播| 欧美性xxxxxxxxx| 久久久国产精品一区| 欧美大荫蒂xxx| 最新国产精品拍自在线播放| 综合136福利视频在线| 欧美日韩成人免费| 国产美女搞久久| 精品视频久久久久久久| 欧美日韩一区二区三区在线免费观看| 国产精自产拍久久久久久| 成人网在线免费观看| 日韩精品中文字| 亚洲成av人片在线观看香蕉| 国产精品丝袜久久久久久不卡| 成人精品aaaa网站| 黑人巨大精品欧美一区二区一视频| 亚洲精品日韩久久久| 国产91ⅴ在线精品免费观看| 欧美黄色片免费观看| 亚洲色无码播放| 久久99久久99精品免观看粉嫩| 日本精品久久中文字幕佐佐木| 国产丝袜一区二区三区| 精品人伦一区二区三区蜜桃免费| 狠狠躁夜夜躁人人爽超碰91| 欧美久久精品午夜青青大伊人| 深夜福利日韩在线看| 亚洲最大的网站| 超在线视频97|