打包靜態庫、動態庫及其使用

1.編寫子函數

add.c

#include<stdio.h>
int add(int left,int right)
{
   return left + right;
}

sub.c

#include<stdio.h>
int sub(int left,int right)
{
   return left - right;
}

mul.c

#include<stdio.h>
int mul(int left,int right)
{
   return left * right;
}

div.c

#include<stdio.h>
int div(int left,int right)
{
   return left / right;
}

2.生成.o文件

gcc -c add.c -o add.o          其中-fPIC選項表示生成與地址無關代碼

分別運行四次生成:add.o sub.o mul.o div.o文件

3.生成動態庫

執行下列命令

gcc -fPIC --share add.o mul.o sub.o div.o -o libmylib.so

-fPIC選項表示生成與地址無關代碼,–share表示生成一個動態庫,其中lib是動態庫的前綴,.so是後綴,中間的mylib是庫名稱。
最後生成:
在這裏插入圖片描述

4.生成靜態庫

執行以下命令

ar -cr libmylib.a add.o mul.o sub.o div.o

ar:靜態庫生成的鏈接器。
-c:創建靜態庫。
-r:模塊替換。
libmychild.a中lib是前綴,.a是後綴名,mylib爲靜態庫名。
運行完後生成以下文件:
在這裏插入圖片描述

5.庫的使用

靜態庫與動態庫名字相同默認鏈接動態庫
編寫四個子函數的頭文件(add.h,sub.h,mul.h,div.h),編寫main.c

#include <stdio.h>
#include"add.h"
#include"sub.h"
#include"mul.h"
#include"div.h"
int main()
    {
      int   a = 10;
      int   b = 20;
      printf(" a + b = %d\n",add(a,b));
      printf(" a - b = %d\n",sub(a,b));
      printf(" a * b = %d\n",mul(a,b));
      printf(" a / b = %d\n",div(a,b));

      return 0;
    }
5.1 動態庫的使用

1.鏈接庫文件的搜索路徑
(1)將要鏈接的第三方庫(libmylib.so),複製到目錄 /lib64 /usr/lib64 …
(2)也可以使用export LIBRARY_PATH=.環境變量的設置,來設置庫的鏈接搜索路徑
(3)gcc的-L選項,指定鏈接時庫的搜索路徑 gcc main.c -o main -L . -lmylib

 gcc main.c -o main -L. -lmylib

2.動態庫的加載搜索路徑
程序運行時,若程序時動態鏈接生成,運行時需要到指定的目錄下加載動態庫 /lib64 /usr/lib64 …

5.2 靜態庫使用

gcc main.c -L -lmychild
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章