青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0
今天由于要用到靜態鏈接庫,所以就學習了一下相關知識,總結如下:

靜態鏈接庫(一般命名為libxxx.a)就是很多.o文件的集合,在你的項目中如果有一個子模快,這個子模塊只是給總控模塊提供一個函數接口,那么你就可以考慮把這個子模快編譯成靜態鏈接庫libxxx.a,然后在總控模塊中編譯的時候,只需-L包含鏈接庫所在的目錄,再-lxxx引用鏈接庫就行.

當然,你也可以用動態鏈接庫,具體的動態鏈接庫創建和引用,做法和靜態鏈接庫大同小異,只是動態鏈接庫是在程序執行的時候是動態的添加到內存的,所以可以實現進程之間的資源共享.
另外動態鏈接庫可以做到所有的函數本著“有需求才調入”的原則,于是大大節省了系統資源:也就是說什么時候或者什么情況下,鏈接載入哪個動態鏈接庫函數,完全由程序員在程序代碼中控制。這樣,當你有一個相當大的工程,每次運行的時候,由于不同的操作需求,就只會有一小部分程序被載入內存。

具體給一個例子,先看一下工程的目錄結構:
$ ls -RF
.:
lib/  main.c  Makefile

./lib:
Makefile.a  Makefile.so  string.h  strlen.c  strnlen.c

在工程主目錄下有main.c主控程序,Makefile文件和lib目錄
lib目錄下有string.h頭文件,strlen.c和strnlen.c,這三個文件里的函數就是我們想生成的庫函數
Makefile.a生成靜態鏈接庫的makefile文件
Makefile.so生成動態鏈接庫的makefile文件



好,讓我們看一看這些文件的具體內容:

頭文件string.h,聲明相關函數原形
$cat lib/string.h

int Strlen(char *pStr);
int StrNlen(char *pStr, unsigned long ulMaxLen);



strlen.c:函數Strlen的實現,獲取給定字符串的長度
$cat lib/strlen.c
 

#include <stdio.h>
#include <assert.h>
int Strlen(char *pStr)
{
    unsigned long ulLength;
    assert(NULL != pStr);

    ulLength = 0;
    while(*pStr++)
    {
        ulLength++;
    }
    return ulLength;
}



strnlen.c:函數StrNlen的實現,獲取給定字符串的長度,如果輸入字符串的長度大于指定的最大長度,則返回最大長度,否者返回字符串的實際長度
$cat lib/strnlen.c

#include<stdio.h>
#include<assert.h>
int StrNlen(char *pStr, unsigned long ulMaxLen)
{
    unsigned long ulLength;
    assert(NULL != pStr);
    if(ulMaxLen <= 0)
    {
        printf("Wrong Max Length!\n");
        return -1;
    }
    ulLength = 0;
    while(*pStr++ && ulLength < ulMaxLen)
    {
        ulLength++;
    }
    return ulLength;
}


這三個文件是在lib/目錄下.

Makefile.a:生成靜態鏈接庫的makefile文件
$ cat lib/Makefile.a

libstr.a: strlen.o strnlen.o
    $(AR) r $@ $^
    $(RM) $^

.PHONY : clean
clean :
    rm -f libstr.a



Makefile.so:生成動態鏈接庫的makefile文件
$ cat Makefile.so 

libstr.so: strlen.o strnlen.o
    gcc -fpic -shared -o $@ $^
    $(RM) $^

.PHONY : clean
clean :
    rm -f libstr.so


-fpic 使輸出的對象模塊是按照可重定位地址方式生成的
-shared指定把對應的源文件生成對應的動態鏈接庫文件libstr.so文件


main.c:總控程序

#include <stdio.h>
#include "./lib/string.h" //靜態庫對應函數的頭文件


int main(int argc, char* argv[])
{
    char str[] = {"hello world"};
    unsigned long ulLength = 0;

    printf("The string is : %s\n", str);
    ulLength = Strlen(str);
    printf("The string length is : %d(use Strlen)\n", ulLength);
    ulLength = StrNlen(str, 10);
    printf("The string length is : %d(use StrNlen)\n", ulLength);

    return 0;
}



總控Makefile
$ cat Makefile 

 CC = gcc
 CFLAGS = -Wall -g
 LIBPATH = -L./lib
 LIB = -lstr
 main: main.o
    ( cd ./lib  && make -f makefile.a ) || ( exit 1 )
   #   ( cd ./lib  && make -f makefile.a && make -f makefile.so ) || ( exit 1 )
   ${CC} ${CFLAGS} -o $@ main.o ${LIBPATH} ${LIB}
 .PHONY:clean
 clean:
    -rm -f main *.o
    ( cd ./lib && make -f makefile.a clean && make -f makefile.so clean ) || ( exit 1 )


動態鏈接庫和靜態鏈接庫使用時唯一的區別是需要加入動態庫的路徑:
      在程序運行期間,也需要告訴系統去哪里找你的動態鏈接庫文件.在UNIX下是通過定義名為LD_LIBRARY_PATH 的環境變量來實現的.
只需將動態鏈接庫的目錄path賦值給此變量即可。為了讓執行程序順利找到動態庫,有三種方法:
1)把庫拷貝到/usr/lib和/lib目錄下.
2)在LD_LIBRARY_PATH環境變量中加上庫所在路徑.例如動態庫libstr.so在/home/xulei/test/lib目錄下,以bash為例,使用命令:
$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xulei/test/lib
在環境變量LD_LIBRARY_PATH后添加/home/xulei/test/lib
3) 修改/etc/ld.so.conf文件,把庫所在的路徑加到文件末尾
然后sudo ldconfig
這樣,加入的目錄下的所有庫文件都可見.


reference:
linux靜態鏈接庫與動態鏈接庫http://blog.chinaunix.net/u2/76292/showart_1274181.html
Linux靜態/動態鏈接庫的創建和使用http://dev.csdn.net/article/84/84562.shtm
from:
http://blog.chinaunix.net/u2/86590/showart.php?id=2138220
posted on 2010-04-25 11:52 chatler 閱讀(720) 評論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
<2011年3月>
272812345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲免费电影在线观看| 在线免费观看视频一区| 一区二区三欧美| 夜夜爽www精品| 国产精品青草综合久久久久99| 亚洲欧美制服另类日韩| 欧美一区二区三区在线| 亚洲国产中文字幕在线观看| 最近看过的日韩成人| 欧美日韩黄色一区二区| 亚洲新中文字幕| 久久se精品一区二区| 在线观看日韩www视频免费 | 99成人在线| 国产精品99久久久久久人| 中文成人激情娱乐网| 国内精品久久久久久久影视麻豆| 老妇喷水一区二区三区| 欧美日韩国产经典色站一区二区三区| 在线一区视频| 久久婷婷一区| 亚洲欧美日韩人成在线播放| 久久久91精品国产一区二区三区 | 韩国三级电影一区二区| 亚洲黄色精品| 国产一区二区三区免费在线观看 | 亚洲人成绝费网站色www| 国产精品一区2区| 亚洲国产精品一区二区第一页 | 一区二区三区精品视频| 欧美中文在线观看国产| 亚洲性线免费观看视频成熟| 久久天天狠狠| 久久精品99无色码中文字幕| 欧美日韩一区二区在线| 免费人成网站在线观看欧美高清| 国产精品国产三级国产普通话蜜臀| 欧美aⅴ99久久黑人专区| 国产精品亚洲一区| 一区二区三区 在线观看视频| 亚洲国产女人aaa毛片在线| 欧美一级视频| 亚洲欧美日韩精品久久奇米色影视| 欧美顶级大胆免费视频| 久久综合激情| 国产一区二区在线观看免费| 亚洲天堂视频在线观看| 中文久久乱码一区二区| 欧美成人xxx| 亚洲电影免费在线观看| 一区二区在线视频播放| 欧美综合77777色婷婷| 欧美中文字幕视频在线观看| 国产精品美女一区二区| 一本大道久久a久久精二百| 亚洲乱码视频| 欧美连裤袜在线视频| 亚洲欧洲在线观看| 亚洲美女一区| 欧美日韩亚洲国产精品| 99精品国产热久久91蜜凸| 一区二区三区精密机械公司| 欧美日韩国语| 亚洲手机在线| 欧美一区免费视频| 国产视频久久久久| 久久狠狠婷婷| 亚洲成色www8888| 亚洲日本黄色| 欧美视频免费在线| 亚洲视频999| 久久精品在线视频| 在线看片欧美| 欧美人成在线| 亚洲欧美不卡| 亚洲精品自在在线观看| 欧美精品在线免费观看| 中文av一区二区| 久久国产色av| 亚洲高清视频在线观看| 欧美日本韩国一区| 亚洲欧美久久| 欧美韩日一区二区| 亚洲伊人色欲综合网| 国产欧美一区二区精品性| 久久免费视频网| 亚洲欧洲综合另类| 欧美一级电影久久| 亚洲日本aⅴ片在线观看香蕉| 欧美日韩国产999| 欧美一级二级三级蜜桃| 亚洲福利视频一区二区| 午夜在线观看欧美| 亚洲大胆视频| 国产精品久久久久av| 久久久久久亚洲综合影院红桃| 亚洲欧洲在线免费| 久久久久88色偷偷免费| 日韩视频久久| 精品不卡一区| 国产精品日韩在线| 久久综合久久综合久久综合| 亚洲已满18点击进入久久| 亚洲高清123| 久久精品国产99国产精品| 99在线精品视频| 在线日本欧美| 国产日本精品| 欧美日韩在线观看视频| 久久综合九色九九| 亚洲欧美另类中文字幕| 亚洲精品久久7777| 麻豆精品传媒视频| 欧美一区高清| 亚洲伊人久久综合| 日韩视频―中文字幕| 在线欧美日韩国产| 国产日韩欧美综合一区| 国产精品国产一区二区| 欧美国产乱视频| 久久香蕉国产线看观看av| 欧美在线视频一区二区| 亚洲一区二区三区乱码aⅴ| 亚洲精品国产精品国自产在线| 久久资源在线| 麻豆国产va免费精品高清在线| 欧美一区国产在线| 香蕉国产精品偷在线观看不卡| 一区二区三区 在线观看视频| 亚洲黄色免费电影| 亚洲国产高清自拍| 亚洲国产精品福利| 亚洲第一综合天堂另类专| 黄色精品一区| 悠悠资源网亚洲青| 一区二区在线观看视频在线观看| 国产美女诱惑一区二区| 国产酒店精品激情| 国产日韩欧美不卡在线| 国产日韩亚洲欧美精品| 国产视频精品网| 狠狠干狠狠久久| 一区在线影院| 亚洲国产精品va在线看黑人| 在线国产精品播放| 91久久视频| 一区二区av在线| 午夜精品美女久久久久av福利| 欧美一区二区三区免费观看| 欧美在线视频一区| 久久亚洲私人国产精品va媚药 | 亚洲欧美影音先锋| 在线精品国精品国产尤物884a| 合欧美一区二区三区| 136国产福利精品导航网址| 亚洲高清资源综合久久精品| 亚洲人成网站在线播| 一区二区三区视频在线观看| 午夜一区不卡| 欧美.www| 日韩图片一区| aⅴ色国产欧美| 欧美一区二区视频在线观看2020| 久久频这里精品99香蕉| 欧美日韩一区二区高清| 国产日韩欧美在线| 亚洲精品乱码久久久久久| 亚洲宅男天堂在线观看无病毒| 久久久精品日韩| 亚洲日本va午夜在线影院| 亚洲一区国产一区| 欧美1区3d| 国产色综合久久| 一区二区欧美日韩| 久久阴道视频| 一区二区三区四区五区精品| 欧美在线综合视频| 欧美三级电影大全| 玉米视频成人免费看| 亚洲一区欧美一区| 免费在线观看成人av| 亚洲视频免费在线观看| 久久综合精品一区| 国产精品永久免费在线| 亚洲精品一区二区三区四区高清 | 一区二区毛片| 免费看黄裸体一级大秀欧美| 亚洲一区二区三| 欧美人成免费网站| 亚洲国产日韩欧美在线图片| 久久av一区二区| 99在线精品免费视频九九视| 麻豆91精品| 国产亚洲欧美一区二区三区| 亚洲视频综合| 亚洲国产专区| 牛夜精品久久久久久久99黑人| 国内揄拍国内精品久久| 亚洲欧美日韩综合| av成人免费在线观看|