日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言 静态库制作(亲测可行)

發布時間:2024/4/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言 静态库制作(亲测可行) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 靜態庫簡介
      • 靜態庫制作
        • 代碼實現
        • 創建靜態庫
      • 鏈接使用靜態庫

?

靜態庫簡介

靜態庫的本質就是將多個目標文件打包成一個庫文件。鏈接靜態庫就是將庫中被調用代碼復制到可執行文件中。使用了靜態庫的可執行文件占用磁盤空間和內容空間都比較大,靜態庫中代碼被修改后,需重新生成庫文件并需重新鏈接庫文件。使用靜態庫的可執行文件無需依賴靜態庫,靜態庫即使被刪除,也可照常運行。執行效率比動態庫相對要高。

靜態庫的文件形式為:lib<庫名>.a

靜態庫制作

代碼實現

假如我們制定一個數學操作的靜態庫,在同一個文件夾下,有如下文件:
– add.c
– add.h
– sub.c
– sub.h

add.c為加法操作實現,sub.c為減法操作實現。
代碼如下:

add.h

#ifndef C_ADD_H #define C_ADD_Hint add(int a, int b);#endif //C_ADD_H
  • ?

add.c

#include "add.h"int add(int a, int b) {return a + b; }
  • ?

sub.h

#ifndef C_SUB_H #define C_SUB_Hint sub(int a, int b);#endif //C_SUB_H
  • ?

sub.c

#include "sub.h"int sub(int a, int b) {return a - b; }
  • ?

創建靜態庫

首先我們將源代碼編譯為目標文件:
gcc -c add.c sub.c
執行完畢后會生產add.o和sub.o文件。

靜態庫創建使用ar命令;
ar -r libmymath.a add.o sub.o
執行完后,會創建一個libmymath.a文件。

鏈接使用靜態庫

我們為了使用上面的靜態庫,我們在如上相同文件夾下,創建一個main.c文件:
– add.c # 加法實現
– add.h # 加法頭文件
– sub.c # 減法實現
– sub.h # 減法頭文件
– libmymath.a # 靜態庫文件
– main.c # 入口主程序

main.c

#include <stdio.h> #include "add.h" #include "sub.h"int main(void) {int a = 20;int b = 10;printf("%d+%d=%d\n", a, b, add(a, b));printf("%d-%d=%d\n", a, b, sub(a, b));return 0; }
  • ?

我們使用#include預處理指令包含了sub.h和add.h頭文件,來使用我們制作的mymath靜態庫。
如果我們直接gcc -o main main.c肯定會出錯,因為編譯器不知道add.h和sub.h是哪里來的,也不知道add和sub函數的定義在哪里。
所以我們需要使用-l選項,讓編譯器鏈接到我們制作的靜態庫:

gcc main.c libmymath.a -o main

?

此時在當前目錄生成了main的可執行文件。
運行得到如下:

20+10=30 20-10=10
  • ?

靜態庫如果被刪除,不會影響可執行文件的執行。因為靜態庫的代碼被復制到了可執行文件中,作為了可執行文件的一部分,這也是靜態庫和動態庫的部分區別所在。

至此,從靜態庫的制作到鏈接使用就結束了。

總結

以上是生活随笔為你收集整理的C语言 静态库制作(亲测可行)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。