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

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

Linux下靜態鏈接庫的制作與使用

Posted on 2009-08-24 23:20 Prayer 閱讀(7220) 評論(0)  編輯 收藏 引用 所屬分類: LINUX/UNIX/AIX

Linux 中的應用程序以以下兩種方式之一鏈接到外部函數:要么在構建時與靜態庫( lib*.a)靜態地鏈接,并且將庫代碼包含在該應用程序的可執行文件里;要么在運行時與共享庫( lib*.so)動態地鏈接。通過動態鏈接裝入器,將動態庫映射進應用程序的可執行內存中。在啟動應用程序之前,動態鏈接裝入器將所需的共享目標庫映射到應用程序的內存,或者使用系統共享的目標并為應用程序解析所需的外部引用。現在應用程序就可以運行了。

 

先介紹靜態庫:

靜態函數庫實際上就是簡單的一個普通的目標文件的集合,一般來說習慣用“.a”作為文件的后綴。可以用ar這個程序來產生靜態函數庫文件。Ar archiver的縮寫。靜態函數庫現在已經不在像以前用得那么多了,主要是共享函數庫與之相比較有很多的優勢的原因。慢慢地,大家都喜歡使用共享函數 庫了。不過,在一些場所靜態函數庫仍然在使用,一來是保持一些與以前某些程序的兼容,二來它描述起來也比較簡單。

靜態庫函數允許程序員把程序link起來而不用重新編譯代碼,節省了重新編譯代碼的時間。不過,在今天這么快速的計算機面前,一般的程序的重新 編譯也花費不了多少時間,所以這個優勢已經不是像它以前那么明顯了。靜態函數庫對開發者來說還是很有用的,例如你想把自己提供的函數給別人使用,但是又想 對函數的源代碼進行保密,你就可以給別人提供一個靜態函數庫文件。理論上說,使用ELF格式的靜態庫函數生成的代碼可以比使用共享函數庫(或者動態函數 庫)的程序運行速度上快一些,大概15%。

假設有下面幾個文件:String.hStrlen.cStrlnen.c
String.h
,聲明相關函數原形;
/***********************************
Filename : String.h
Description :
Author   : HCJ
Date     : 2006-5-7
************************************/
int Strlen(char *pStr);
int StrNlen(char *pStr, unsigned long ulMaxLen);

Strlen.c:函數Strlen的實現,獲取給定字符串的長度;
/**************************************
Filename    : get string length
Description :
Author      : HCJ
Date        : 2006/5/7
**************************************/
#include<stdio.h>
#include<assert.h>
int Strlen(char *pStr)
{
    unsigned long ulLength;
    assert(NULL != pStr);

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

Strlnen.c:函數StrNlen的實現,獲取給定字符串的長度,如果輸入字符串的長度大于指定的最大長度,則返回最大長度,否者返回字符串的實際長度;
/**********************************************
Fileneme: mystrnlen.c
Description: get input string length,if string large
             max length input return max length,
             else real length
Author: HCJ
Date : 2006-5-7
**********************************************/
#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;
}

生成靜態鏈接庫:
利用GCC生成對應目標文件:
#>gcc –c Strlen.c Strnlen.c
如果對應的文件沒有錯誤,gcc會對文件進行編譯生成Strlen.oStrnlen.o兩個目標文件(相當于windows下的obj文件)。然后用ar創建一個名字為libstr.a的庫文件,并把Strlen.o Strnlen.o的內容插入到對應的庫文件中。,相關命令如下:
#>ar –rc libstr.a Strlen.o Strnlen.o
命令執行成功以后,對應的靜態庫libstr.a已經成功生成。

靜態庫的使用:
假設有下面的文件要使用對應的的靜態庫:
編譯生成對應的目標文件:

#>gcc -c -I/home/hcj/xxxxxxxx main.c
生成可執行文件:
#>gcc -o main1 -L/home/hcj/xxxxxxxx main.o libstr.a
其中-I/home/hcj/xxxxxxxx-L/home/hcj/xxxxxxxx是通過-I-L指定對應的頭文件和庫文件的路徑。libstr.a是對應的靜態庫的名稱。這樣對應的靜態庫已經編譯到對應的可執行程序中。執行對應的可執行文件便可以對應得函數調用的結果。

/*****************************************
FileName: main.c
Description: test static/dynamic library
Author: HCJ
Date : 2005-5-7
******************************************/
#include<stdio.h>
#include “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;
}

這篇文章也不錯,就是不太整潔:

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美亚洲视频在线看网址| 欧美久久综合| 亚洲欧美国产精品va在线观看| 亚洲日韩第九十九页| 欧美a级片网| 国产伦精品一区二区三区视频黑人| 国产精品综合久久久| 99精品99| 亚洲高清在线观看| 亚洲素人一区二区| 欧美大片在线观看一区| 亚洲国产精品999| 久久精品动漫| 午夜日韩电影| 国产欧美日韩亚洲| 欧美在线中文字幕| 亚洲欧美不卡| 国产欧美一区二区三区久久人妖| 亚洲在线免费视频| 欧美黑人在线播放| 免费观看亚洲视频大全| 亚洲性感美女99在线| 欧美日本二区| 中文一区字幕| 最新成人av网站| 欧美肥婆在线| 亚洲精品一级| 一区二区三区国产在线观看| 欧美特黄视频| 久久黄色网页| 久久嫩草精品久久久精品| 亚洲国产精品成人| 亚洲人久久久| 国产精品久久久久秋霞鲁丝| 亚洲综合成人婷婷小说| 亚洲欧美一区二区精品久久久| 国产精品亚洲不卡a| 亚洲一级影院| 久久女同互慰一区二区三区| 一区二区三区在线视频播放| 国产精品永久免费| 欧美在线视频免费观看| 欧美亚洲在线播放| 亚洲第一区色| 蜜臀久久99精品久久久久久9| 久久这里有精品15一区二区三区| 亚洲理论在线| 亚洲午夜一区二区| 激情欧美一区二区三区| 欧美成人免费在线观看| 欧美日韩一区二区三区在线观看免 | 久久久精彩视频| 日韩一级欧洲| 国产精品盗摄一区二区三区| 免费试看一区| 在线播放中文字幕一区| 久久成人亚洲| 能在线观看的日韩av| 亚洲乱码久久| 亚洲欧美日产图| 亚洲精品1区2区| 国产精品久久久99| 女女同性精品视频| 国产精品久久久对白| 另类激情亚洲| 国产噜噜噜噜噜久久久久久久久| 欧美高清在线视频| 国产日韩欧美在线| 亚洲美女性视频| 在线成人免费视频| 亚洲一区二区在线免费观看视频| 最新国产精品拍自在线播放| 午夜亚洲性色福利视频| 999亚洲国产精| 久久人91精品久久久久久不卡| 亚洲专区在线| 欧美日韩久久不卡| 欧美激情亚洲自拍| 精品福利免费观看| 欧美一进一出视频| 亚洲欧美日韩久久精品| 欧美精品一区二区三区蜜桃| 久久婷婷丁香| 国产综合18久久久久久| 亚洲一级二级在线| 正在播放欧美一区| 欧美高清成人| 欧美成人视屏| 亚洲第一福利在线观看| 欧美有码在线视频| 久久xxxx精品视频| 国产精品国产三级国产普通话蜜臀 | 夜夜嗨av一区二区三区中文字幕 | 亚洲电影毛片| 亚洲午夜高清视频| 韩日在线一区| 欧美一区二区三区婷婷月色| 亚洲综合第一页| 亚洲欧洲日产国产综合网| 欧美在线观看视频一区二区三区| 国产精品久久久久一区| 国产在线精品一区二区中文| 久久久亚洲影院你懂的| 亚洲国产视频直播| 亚洲高清在线观看一区| 欧美在线亚洲在线| 久久久久久色| 激情综合五月天| 久久黄金**| 久热精品在线视频| 欧美不卡视频一区发布| 亚洲大片av| 99re6这里只有精品视频在线观看| 欧美成人精品高清在线播放| 亚洲国产婷婷| 亚洲视频在线一区| 国产精品自拍网站| 久久久久久久波多野高潮日日| 免费视频一区| 99精品欧美一区二区三区| 欧美日韩精品三区| 亚洲午夜久久久久久久久电影院| 欧美一区二区视频97| 狠狠色综合网站久久久久久久| 美日韩精品视频| 一二三区精品福利视频| 欧美一区在线视频| 亚洲高清在线| 国产精品捆绑调教| 久久久精品999| 亚洲国产高清aⅴ视频| 日韩亚洲一区二区| 亚洲区在线播放| 亚洲欧美激情在线视频| 狠狠色狠狠色综合系列| 亚洲欧美在线高清| 久久影视三级福利片| 99精品99| 免费在线亚洲| 欧美成人激情在线| 亚洲国产成人精品久久久国产成人一区| 午夜国产不卡在线观看视频| 性欧美1819sex性高清| 国产精品久久久久久久久| 亚洲国产精品久久久久婷婷老年| 国产一区二区三区网站| 亚洲欧美日韩一区| 欧美在线观看一区二区| 欧美日韩免费看| 亚洲欧洲日本在线| 亚洲人成欧美中文字幕| 久久精品一级爱片| 久久九九精品| 国产毛片一区| 亚洲欧美精品在线观看| 亚洲一级黄色| 国产精品毛片在线看| 亚洲一区二区视频| 亚洲欧美日韩精品久久久| 国产精品久久亚洲7777| 欧美影视一区| 亚洲最新视频在线| 国产日本欧美一区二区| 欧美激情第3页| 欧美伊久线香蕉线新在线| 日韩视频免费在线| 欧美大片免费久久精品三p| 久久激情久久| 欧美一级久久| 欧美亚洲在线观看| 一区二区三区精品国产| 亚洲美女中文字幕| 亚洲激情影院| 亚洲第一主播视频| 亚洲成人中文| 亚洲二区在线观看| 国产亚洲精品久久久久久| 国产精品久久久久久久浪潮网站| 欧美精品激情| 欧美日本在线看| 欧美三级第一页| 国产精品sss| 国产精品久久久久影院亚瑟 | 亚洲免费观看视频| 亚洲人成啪啪网站| 欧美高清视频www夜色资源网| 久热re这里精品视频在线6| 久久夜色精品国产| 蜜臀va亚洲va欧美va天堂 | 久久久噜噜噜久久中文字幕色伊伊| 亚洲一区二区三区免费在线观看| 亚洲天堂第二页| 校园春色国产精品| 久久狠狠婷婷| 久久综合伊人77777蜜臀| 免费不卡在线视频| 亚洲电影免费观看高清完整版在线观看 | 亚洲综合国产激情另类一区| 久久精品一区二区| 久久精品国产99精品国产亚洲性色|