1. 程式人生 > >Linux程式設計:一、入門(建立自己的靜態庫)

Linux程式設計:一、入門(建立自己的靜態庫)

專案檔案最終的樹目錄,生成目標程式後,可以刪除中間檔案
 

note:靜態庫以lib開頭 ,比如mylib.a
靜態庫缺點:很多程式使用一個函式庫的函式時,會產生很多個副本。
共享庫.so可以解決此問題。

  1. 建立自己的函式,放在不同的標頭檔案中,只定義不宣告,並用gcc編譯
    //addAnimal.c
    #include <stdio.h>
    void addAnimal(char *arg)
    {
        printf("add animal: %s\n", arg);
    }
    
    //addFlower.c
    #include <stdio.h>
    void addFlower(char *arg)
    {
        printf("add flower: %s\n", arg);
    }

    gcc -c addAnimal.c addFlower.c,生成.o檔案,用於庫檔案的歸檔

  2. 建立包含所有函式宣告的標頭檔案(libmy.h)

    //libmy.h
    void addAnimal(char *);
    void addFlower(char *);

    用於專案的呼叫,包含此標頭檔案即可使用其中的函式

  3. 利用ar命令歸檔
    ar crv lib.a addAnimal.o addFlower.o

  4. 編譯目標程式並連結標頭檔案和庫目錄

    //createMyWorld.c
    #include <stdlib.h>
    #include <stdio.h>
    #include "libmy.h"
    
    int main()
    {
        printf("start build my world:\n");
        addAnimal("pig");
        addFlower("rose");
        exit(0);
    }

    gcc createMyWorld.c -o createMyWorld -I./mylib/  -L./mylib -lmy
    note:-I加入非標準標頭檔案路徑,-L加入非標準庫目錄, -lmy利用-l命令搜尋libmy靜態庫,注意一定不能使用libmy.a會提示找不到