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

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>
            久久黄金**| 欧美在线免费一级片| 亚洲精品之草原avav久久| 亚洲自拍偷拍视频| 欧美二区视频| 一色屋精品视频在线观看网站| 亚洲一区三区电影在线观看| 欧美成人在线影院| 久久国产日本精品| 国语自产偷拍精品视频偷| 欧美亚洲系列| 亚洲午夜精品在线| 国产精品久久久久久久久搜平片| 欧美主播一区二区三区| 日韩亚洲欧美一区| 欧美国产激情二区三区| 亚洲精品国产精品国产自| 欧美777四色影视在线| 久久综合久久综合久久综合| 1000部精品久久久久久久久 | 久久在线免费观看视频| 欧美一区二区三区久久精品茉莉花| 欧美日韩一二三区| 亚洲一区二区三区免费在线观看| 香蕉久久久久久久av网站| 在线观看三级视频欧美| 久久精品99| 国产日韩精品综合网站| 欧美日本免费| 久久久久免费视频| 国产自产高清不卡| 久久综合色综合88| 美女啪啪无遮挡免费久久网站| 红桃视频国产精品| 欧美二区乱c少妇| 欧美日韩成人在线观看| 香蕉久久夜色精品| 老司机午夜精品视频| 亚洲美洲欧洲综合国产一区| 亚洲精品一区在线观看| 国产精品乱子久久久久| 免费观看久久久4p| 欧美日韩在线精品一区二区三区| 欧美在线观看天堂一区二区三区| 久久久久久久精| 亚洲视频你懂的| 久久精品日韩欧美| 国产精品一区二区久久久| 久久精品首页| 亚洲国产婷婷综合在线精品| 亚洲精品影视在线观看| 亚洲一区欧美二区| 亚洲深夜福利网站| 黄色亚洲网站| 日韩午夜中文字幕| 激情成人av| 一区二区三区www| 在线观看欧美亚洲| 亚洲女人天堂av| 91久久夜色精品国产网站| 一本大道久久精品懂色aⅴ| 激情久久久久久久| 一区二区三区视频在线观看| 在线免费不卡视频| 亚洲欧美日韩另类| 一区二区欧美亚洲| 国产女主播在线一区二区| 西西人体一区二区| 亚洲国产免费看| 一区二区三区久久精品| 在线精品国产成人综合| 亚洲专区一区| 中日韩男男gay无套| 久久综合色综合88| 久久久综合激的五月天| 国产日韩欧美二区| 亚洲性夜色噜噜噜7777| 一区二区成人精品| 欧美激情在线有限公司| 欧美国产日韩在线| 在线观看日韩欧美| 久久伊人一区二区| 久热精品视频在线| 韩日欧美一区| 久久av一区二区三区亚洲| 国产亚洲精品福利| 日韩一级在线| 亚洲精品自在久久| 欧美激情黄色片| 免费成人激情视频| 在线播放视频一区| 久久久久网址| 欧美 日韩 国产精品免费观看| 好吊妞**欧美| 久久中文精品| 欧美激情精品久久久久久免费印度| 欧美日韩1区2区| 91久久精品国产91性色| 亚洲一二三区视频在线观看| 欧美国产大片| 亚洲国产精品第一区二区| 亚洲国产精品高清久久久| 久久夜色精品一区| 欧美黄色影院| 宅男66日本亚洲欧美视频| 欧美色图一区二区三区| 9久草视频在线视频精品| 亚洲视频一区| 国产亚洲综合在线| 久久久五月天| 91久久精品国产91性色| 亚洲性线免费观看视频成熟| 国产精品国产自产拍高清av| 性欧美暴力猛交另类hd| 免费91麻豆精品国产自产在线观看| 亚洲成色最大综合在线| 欧美激情国产精品| 亚洲一区视频在线| 美女主播精品视频一二三四| 亚洲精品久久视频| 国产精品久久久一本精品| 亚洲欧洲99久久| 欧美国产一区二区| 亚洲免费在线视频| 在线观看三级视频欧美| 欧美三级黄美女| 久久国产精品久久久久久电车| 欧美激情精品久久久久久大尺度| 亚洲一二三区在线观看| 国外成人性视频| 欧美日韩精品欧美日韩精品| 欧美一区二区福利在线| 亚洲激情成人| 久久久久网址| 亚洲性图久久| 亚洲高清视频在线观看| 国产精品久久久对白| 久久香蕉国产线看观看av| 亚洲视频电影图片偷拍一区| 欧美电影在线播放| 欧美在线观看视频一区二区三区| 亚洲美女视频在线免费观看| 国内综合精品午夜久久资源| 国产精品美女久久福利网站| 欧美激情aⅴ一区二区三区| 欧美一级大片在线观看| 夜色激情一区二区| 欧美不卡三区| 久久久久久久综合色一本| 亚洲图片你懂的| 亚洲激情一区二区三区| 国内精品久久久久久久果冻传媒| 欧美日韩亚洲一区二区三区在线| 久久精品论坛| 午夜视黄欧洲亚洲| 亚洲私人影吧| 一区二区精品国产| 欧美在线观看一区二区| 亚洲午夜久久久| 亚洲国产综合91精品麻豆| 国产日本欧美一区二区| 欧美日韩一区高清| 欧美日韩国产综合视频在线观看中文| 久久久777| 久久精品久久99精品久久| 欧美一区二区三区精品| 午夜激情久久久| 亚洲午夜精品一区二区三区他趣 | 亚洲淫片在线视频| 亚洲精品欧美极品| 亚洲国产精品电影在线观看| 美女久久一区| 免费在线亚洲| 鲁鲁狠狠狠7777一区二区| 久久精品一区中文字幕| 久久久www成人免费精品| 久久精品日韩| 久久天堂av综合合色| 久久久噜噜噜久久狠狠50岁| 欧美一区二区三区视频免费| 午夜伦欧美伦电影理论片| 午夜精品www| 欧美在线观看网站| 久久久精品一区二区三区| 久久久噜噜噜久噜久久 | 亚洲欧美日本国产有色| 亚洲视频免费在线| 亚洲一区中文| 久久精品盗摄| 蜜桃久久av一区| 欧美日韩精品综合| 国产伦精品一区二区三区视频黑人 | 一区二区冒白浆视频| 亚洲欧美综合一区| 久久青草久久| 欧美日本三级| 国产精品一级| 亚洲高清在线视频| 一区二区三区四区五区精品视频| 亚洲欧美日韩国产一区|