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

posts - 297,  comments - 15,  trackbacks - 0
今天由于要用到靜態(tài)鏈接庫(kù),所以就學(xué)習(xí)了一下相關(guān)知識(shí),總結(jié)如下:

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

當(dāng)然,你也可以用動(dòng)態(tài)鏈接庫(kù),具體的動(dòng)態(tài)鏈接庫(kù)創(chuàng)建和引用,做法和靜態(tài)鏈接庫(kù)大同小異,只是動(dòng)態(tài)鏈接庫(kù)是在程序執(zhí)行的時(shí)候是動(dòng)態(tài)的添加到內(nèi)存的,所以可以實(shí)現(xiàn)進(jìn)程之間的資源共享.
另外動(dòng)態(tài)鏈接庫(kù)可以做到所有的函數(shù)本著“有需求才調(diào)入”的原則,于是大大節(jié)省了系統(tǒng)資源:也就是說(shuō)什么時(shí)候或者什么情況下,鏈接載入哪個(gè)動(dòng)態(tài)鏈接庫(kù)函數(shù),完全由程序員在程序代碼中控制。這樣,當(dāng)你有一個(gè)相當(dāng)大的工程,每次運(yùn)行的時(shí)候,由于不同的操作需求,就只會(huì)有一小部分程序被載入內(nèi)存。

具體給一個(gè)例子,先看一下工程的目錄結(jié)構(gòu):
$ 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,這三個(gè)文件里的函數(shù)就是我們想生成的庫(kù)函數(shù)
Makefile.a生成靜態(tài)鏈接庫(kù)的makefile文件
Makefile.so生成動(dòng)態(tài)鏈接庫(kù)的makefile文件



好,讓我們看一看這些文件的具體內(nèi)容:

頭文件string.h,聲明相關(guān)函數(shù)原形
$cat lib/string.h

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



strlen.c:函數(shù)Strlen的實(shí)現(xiàn),獲取給定字符串的長(zhǎng)度
$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:函數(shù)StrNlen的實(shí)現(xiàn),獲取給定字符串的長(zhǎng)度,如果輸入字符串的長(zhǎng)度大于指定的最大長(zhǎng)度,則返回最大長(zhǎng)度,否者返回字符串的實(shí)際長(zhǎng)度
$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;
}


這三個(gè)文件是在lib/目錄下.

Makefile.a:生成靜態(tài)鏈接庫(kù)的makefile文件
$ cat lib/Makefile.a

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

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



Makefile.so:生成動(dòng)態(tài)鏈接庫(kù)的makefile文件
$ cat Makefile.so 

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

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


-fpic 使輸出的對(duì)象模塊是按照可重定位地址方式生成的
-shared指定把對(duì)應(yīng)的源文件生成對(duì)應(yīng)的動(dòng)態(tài)鏈接庫(kù)文件libstr.so文件


main.c:總控程序

#include <stdio.h>
#include "./lib/string.h" //靜態(tài)庫(kù)對(duì)應(yīng)函數(shù)的頭文件


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 )


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


reference:
linux靜態(tài)鏈接庫(kù)與動(dòng)態(tài)鏈接庫(kù)http://blog.chinaunix.net/u2/76292/showart_1274181.html
Linux靜態(tài)/動(dòng)態(tài)鏈接庫(kù)的創(chuàng)建和使用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 閱讀(726) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺(jué)這個(gè)博客還是不錯(cuò),雖然做的東西和我不大相關(guān),覺(jué)得看看還是有好處的

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

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品在线二区| 亚洲性图久久| 亚洲精品国精品久久99热| 女女同性精品视频| 欧美国产在线电影| 亚洲国产美女久久久久| 亚洲精品国久久99热| 亚洲精品在线一区二区| 一本在线高清不卡dvd| 亚洲视频一起| 亚欧成人精品| 久久综合图片| 欧美美女福利视频| 国产精品久久久久毛片软件| 国产精品视频观看| 国内精品久久久久久影视8| 狠久久av成人天堂| 亚洲精品乱码视频| 亚洲综合国产激情另类一区| 欧美一区2区视频在线观看| 久久性色av| 亚洲黄色尤物视频| 亚洲制服少妇| 久久免费精品视频| 欧美日韩国产不卡| 国产亚洲一区二区三区在线播放| 伊人久久噜噜噜躁狠狠躁| 日韩视频免费在线观看| 午夜精品在线观看| 美乳少妇欧美精品| 99国产精品久久久久老师| 香港成人在线视频| 欧美高清不卡| 国产欧美日韩另类一区| 亚洲激情小视频| 亚洲欧美日韩中文播放| 欧美成年人网站| 亚洲视屏在线播放| 久久综合网络一区二区| 国产精品久久久久av| 在线播放一区| 亚洲欧美影院| 亚洲国产精品一区二区www在线| 一区二区欧美视频| 麻豆成人综合网| 国产精品蜜臀在线观看| 亚洲人精品午夜| 久久精品毛片| 艳妇臀荡乳欲伦亚洲一区| 久久九九精品99国产精品| 欧美日韩国产三级| 亚洲国产成人午夜在线一区| 亚洲综合视频1区| 欧美激情精品久久久久久大尺度| 亚洲一级高清| 欧美日本精品一区二区三区| 激情综合电影网| 亚洲欧美中文另类| 亚洲精品乱码久久久久久蜜桃91| 久久国产精彩视频| 国产精品免费网站| 一本色道综合亚洲| 欧美成人免费全部| 久久av最新网址| 国产精品蜜臀在线观看| 日韩视频免费观看| 欧美夫妇交换俱乐部在线观看| 亚洲自拍啪啪| 欧美少妇一区| 亚洲精品免费在线播放| 美女网站在线免费欧美精品| 西瓜成人精品人成网站| 国产精品久线观看视频| 一区二区三区成人| 亚洲黄色免费网站| 麻豆精品一区二区av白丝在线| 国产午夜精品一区理论片飘花 | 久久爱www.| 亚洲乱码久久| 欧美精品一区二区三区蜜桃| 亚洲国产一区在线| 欧美不卡视频一区| 久久精品免费电影| 国产综合香蕉五月婷在线| 先锋资源久久| 亚洲午夜精品久久| 国产精品v欧美精品v日韩 | 久久一区二区三区国产精品| 国产日韩欧美不卡| 欧美一级久久久久久久大片| 亚洲视频香蕉人妖| 国产精品黄视频| 亚洲一区二区精品视频| 99成人在线| 国产精品国产三级欧美二区| 亚洲校园激情| 亚洲午夜久久久久久久久电影网| 欧美日韩亚洲国产一区| 亚洲图片欧美一区| 亚洲视频在线一区| 国产日韩精品视频一区| 久久精品国产一区二区电影| 欧美在线视频免费播放| 国内免费精品永久在线视频| 久久艳片www.17c.com| 久久久久久久欧美精品| 亚洲国产精品小视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲精品欧美| 欧美日一区二区在线观看| 亚洲综合导航| 欧美一区二区日韩| 亚洲第一二三四五区| 欧美国产综合视频| 欧美日韩1234| 亚洲欧美区自拍先锋| 欧美一区二区高清| 在线观看中文字幕不卡| 亚洲国产小视频在线观看| 欧美日韩亚洲天堂| 欧美日韩视频一区二区三区| 中文日韩电影网站| 亚洲综合欧美日韩| 激情六月综合| 亚洲人成在线播放| 国产精品久久久久一区二区三区共 | 亚洲免费一级电影| 久久国产精品毛片| 亚洲精品在线观看免费| 一本色道久久综合亚洲精品婷婷 | 午夜精品三级视频福利| 一区二区三区在线看| 亚洲精品日本| 国产日韩欧美日韩| 亚洲福利专区| 国产精品久久久久久福利一牛影视| 久久国产精品99国产| 美女视频一区免费观看| 亚洲欧美欧美一区二区三区| 久久久精品国产一区二区三区| 日韩亚洲精品电影| 欧美一区三区三区高中清蜜桃| 91久久精品美女高潮| 亚洲一级黄色| 亚洲日本欧美天堂| 翔田千里一区二区| 99av国产精品欲麻豆| 欧美一区二区三区免费观看| 亚洲人成人99网站| 午夜视频在线观看一区二区| 亚洲三级色网| 欧美在线亚洲| 亚洲一区欧美一区| 美女啪啪无遮挡免费久久网站| 亚洲欧美中文日韩v在线观看| 麻豆精品精华液| 久久精品道一区二区三区| 欧美喷水视频| 欧美二区在线看| 国产区在线观看成人精品| 亚洲日韩第九十九页| 一区国产精品| 午夜精品一区二区在线观看| 99精品欧美一区二区三区| 久久精品视频在线观看| 亚洲欧美日韩精品久久| 欧美精品一区二区三区在线看午夜 | 在线观看福利一区| 亚洲欧美日本精品| 一区二区高清| 欧美jizz19hd性欧美| 久久久久九九九九| 国产精品欧美日韩| 99精品久久| 亚洲毛片av| 欧美sm极限捆绑bd| 蜜桃久久av一区| 国产亚洲欧美色| 亚洲综合色在线| 亚洲影院免费观看| 欧美日韩国产在线| 亚洲黄色大片| 亚洲日本va午夜在线电影| 久久久久久久高潮| 久久视频一区二区| 国产一区二区精品在线观看| 亚洲欧美成人综合| 午夜电影亚洲| 国产精品久久久久一区二区三区共 | 最新国产成人在线观看| 久久九九国产精品怡红院| 久久久久一区二区三区四区| 国产精品爽爽ⅴa在线观看| 中文日韩欧美| 亚洲在线一区二区| 国产精品久久久久aaaa樱花| 日韩一区二区精品在线观看| 亚洲精品一区二区三区99| 欧美成人一二三| 亚洲激情不卡|