|簡體中文

比思論壇

 找回密碼
 按這成為會員
搜索



查看: 918|回復: 6
打印 上一主題 下一主題

Linux 静态库编译操作实例

[複製鏈接]

56

主題

0

好友

492

積分

中學生

Rank: 3Rank: 3

  • TA的每日心情
    擦汗
    3 天前
  • 簽到天數: 205 天

    [LV.7]常住居民III

    推廣值
    0
    貢獻值
    0
    金錢
    156
    威望
    492
    主題
    56
    樓主
    發表於 2014-7-18 20:33:49
    原理:
      linux系统中分为2种库:静态库和共享库。静态库是以.a后缀结尾的文件,通常是在编译的链接阶段指定静态库的位置进行编译生成可执行文件,因此生成的可执行文件在执行的时候不需要静态库的参与。动态库共享库是以.so后缀结尾的文件,通常情况下代码中有需要用到共享库的地方在编译链接阶段指定共享库的路径在执行可执行文件的时候从内存表中读取代码,内存中只有一份所有程序共享,所以这个方式是要求共享库必须参与如果运行时找不到是会报错的。这2种库系统都有默认的路径一般都是/usr/lib/和/lib以及/usr/local/lib,这也要看具体的系统版本,也分32位和64位的路径。下面就来具体实践一下。
    实践:
      建立相关文件步骤如下:
      1>建立calc.h文件,并输入如下代码:

    [size=1em]
    1

    2

    3

    4

    5

    6

    #ifndef CALC_H
    #define CALC_H

    double Add(double a,double b);

    #endif



      2>建立calc.c文件,并输入如下代码:
    [size=1em]
    1

    2

    3

    4

    5

    6

    7

    #include <stdio.h>
    #include "calc.h"

    double Add(double a,double b)
    {
         return a + b;   
    }



      3>建立calcmain.c文件,并输入如下代码:
    [size=1em]
    1

    2

    3

    4

    5

    6

    7

    8

    9

    #include <stdio.h>
    #include "calc.h"

    int main(void)
    {
        double c = Add(2.0,3.0);
        printf("result:%f",c);
        return 0;        
    }



      4-1>生成静态库执行,命令如下:
    [size=1em]
    1

    2

    3

    4

    5

    6

    gcc -Wall calc.c -o calc.o   
    gcc -Wall calcmain.c -o calcmain.o

    ar rcs libcalc.a calc.o    //使用ar命令生成静态库

    gcc -Wall calcmain.o libcalc.a -o calc    //生成calc可执行文件,



      4-2>生成动态共享库执行。命令如下:
    [size=1em]
    1

    2

    3

    4

    //因为之前已经生成了calc.o以及calcmain.o 2个目标文件
    gcc -shared -fPIC calc.o -o libcalc.so    //使用gcc生成共享库,其中-shared:共享库;-fPIC:与位置无关

    gcc -Wall calcmain.o -o calc -L. -lcalc    //-L.:当前目录搜索;-l:使用外部lib库。<br><br>export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH    //指定临时共享库搜索路径,上面的-L.参数经过实验无效不知道为什么,共享库搜索的路径默认是不会搜索当前路径的。<br><br>




    17

    主題

    1

    好友

    1819

    積分

    大學生

    Rank: 6Rank: 6

  • TA的每日心情
    難過
    2022-12-2 19:54
  • 簽到天數: 683 天

    [LV.9]以壇為家II

    推廣值
    0
    貢獻值
    18
    金錢
    3794
    威望
    1819
    主題
    17

    回文勇士 文明人 簽到勳章 男生勳章 簽到達人 中學生 高中生 大學生

    沙發
    發表於 2014-7-20 05:05:58
    lz你的图有点儿。。。
    無效樓層,該帖已經被刪除
    無效樓層,該帖已經被刪除
    5#
    無效樓層,該帖已經被刪除
    6#
    無效樓層,該帖已經被刪除
    重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

    手機版| 廣告聯繫

    GMT+8, 2024-11-11 08:27 , Processed in 0.026495 second(s), 17 queries , Gzip On, Memcache On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回頂部