色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何利用C語言構建一個靜態庫呢

冬至子 ? 來源:計算機科學實驗室 ? 作者:好壞生長 ? 2023-01-18 11:20 ? 次閱讀

在用到linux編程的時候,Makefile可以很好的幫助管理C語言工程,如何構建一個靜態庫,用一個很小的案例來說明。

首先準備需要的文件,以及文件中的內容,如下所示

$ cat test1.c 
#include 


int main()
{
  printf("hello world\\n");


  return 0;
}

這個.c文件非常簡單,就是輸出一個hello world。用gcc編譯,就能輸出。

`

: ~/Documents/clan/test1$ gcc test1.c

:~ /Documents/clan/test1$ tree

.

├── a.out

└── test1.c

0 directories, 3 files

:~/Documents/clan/test1$ ./a.out

hello world

2.jpg

現在換種方式實現,采用Makefile的形式,編輯Makefile的腳本

:~/Documents/clan/test1$ rm a.out 
:~/Documents/clan/test1$ cat Makefile 
test1 : test1.o
  gcc -o test1 test1.o


test1.o : test1.c
  gcc -c -o test1.o test1.c


clean :
  rm -f test1 test1.o

編譯Makefile文件,同樣可以實現這個效果

:~/Documents/clan/test1$ tree
.
├── Makefile
└── test1.c

0 directories, 2 files
:/Documents/clan/test1$ make
gcc -c -o test1.o test1.c
gcc -o test1 test1.o
:
/Documents/clan/test1$ tree
.
├── Makefile
├── test1
├── test1.c
└── test1.o

0 directories, 4 files
:~/Documents/clan/test1$ ./test1
hello world

2.jpg

現在將產物刪掉,方便后面的實驗

: ~/Documents/clan/test1$ make clean

rm -f test1 test1.o

:~ /Documents/clan/test1$ tree

.

├── Makefile

└── test1.c

0 directories, 2 files

2.jpg

現在回到gcc 編譯的過程中,先編譯得到.o文件,然后編譯得到靜態庫文件,最后通過編譯庫文件,同樣可以生成可執行文件

: ~/Documents/clan/test1$ gcc -c -o test1.o test1.c

:~ /Documents/clan/test1$ tree

.

├── Makefile

├── test1.c

└── test1.o

0 directories, 3 files

: ~/Documents/clan/test1$ ar -cr libtest1.a test1.o

:~ /Documents/clan/test1$ tree

.

├── libtest1.a

├── Makefile

├── test1.c

└── test1.o

0 directories, 4 files

: ~/Documents/clan/test1$ gcc libtest1.a

:~ /Documents/clan/test1$ tree

.

├── a.out

├── libtest1.a

├── Makefile

├── test1.c

└── test1.o

0 directories, 5 files

:~/Documents/clan/test1$ ./a.out

hello world

2.jpg

刪除上述生成的文件

: ~/Documents/clan/test1$ rm a.out

:~ /Documents/clan/test1$ rm libtest1.a

: ~/Documents/clan/test1$ rm test1.o

:~ /Documents/clan/test1$ tree

.

├── Makefile

└── test1.c

0 directories, 2 files

重新編輯Makefile文件

test1 : libtest1.a

gcc -o test1 libtest1.a

libtest1.a : test1.o

ar -cr libtest1.a test1.o

test1.o : test1.c

gcc -c -o test1.o test1.c

clean :

rm -f test1 test1.o libtest1.a

2.jpg

重新編譯Makefile文件,然后執行,同樣可以實現,這就是靜態庫的實現方式

: ~/Documents/clan/test1$ make

gcc -c -o test1.o test1.c

ar -cr libtest1.a test1.o

gcc -o test1 libtest1.a

:~ /Documents/clan/test1$ tree

.

├── libtest1.a

├── Makefile

├── test1

├── test1.c

└── test1.o

0 directories, 5 files

:~/Documents/clan/test1$ ./test1

hello world

上述方式,實現了一個非常簡單的案例,這是在同一目錄層級下實現的,如果涉及到多個目錄層級呢?

├── func

│ ├── func.c

│ └── func.h

├── Makefile

└── test1.c

其中func.c文件的代碼如下

#include "func.h"

int add(int a, int b){return a+b;}

func.h文件的代碼

int add(int a, int b);

test.c文件的代碼

#include

#include "func/func.h"

int main()

{

printf("hello world\\n");

printf("%d\\n",add(10,20));

return 0;

}

用gcc命令編譯

2.jpg

然后修改Makefile文件

:~/Documents/clan/test1$ cat Makefile

test1 : test1.o func/func.o

gcc -o test1 test1.o func/func.o

test1.o : test1.c

gcc -c -o test1.o test1.c

func/func.o : func/func.c func/func.h

gcc -c -o func/func.o func/func.c

clean :

rm -f test1 test1.o func/func.o

2.jpg

編譯所有文件,運行可執行文件,即可輸出結果

:~/Documents/clan/test1$ tree

.

├── func

│ ├── func.c

│ └── func.h

├── Makefile

└── test1.c

1 directory, 4 files

: ~/Documents/clan/test1$ make

gcc -c -o test1.o test1.c

gcc -c -o func/func.o func/func.c

gcc -o test1 test1.o func/func.o

:~ /Documents/clan/test1$ tree

.

├── func

│ ├── func.c

│ ├── func.h

│ └── func.o

├── Makefile

├── test1

├── test1.c

└── test1.o

1 directory, 7 files

:~/Documents/clan/test1$ ./test1

hello world

30

2.jpg

要生成Makefile的靜態庫,只需要在這個基礎上進行修改即可

test1 : libtest1.a func/libfunc.a

gcc -o test1 libtest1.a func/libfunc.a

libtest1.a : test1.o

ar -cr libtest1.a test1.o

func/libfunc.a : func/func.o

ar -cr func/libfunc.a func/func.o

test1.o : test1.c

gcc -c -o test1.o test1.c

func/func.o : func/func.c func/func.h

gcc -c -o func/func.o func/func.c

clean :

rm -f test1 test1.o libtest1.a func/libfunc.a func/func.o

2.jpg

這是一個非常簡單的模板案例,靜態庫的編譯過程比較簡單,動態庫相對復雜。

審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136738
  • gcc編譯器
    +關注

    關注

    0

    文章

    78

    瀏覽量

    3381
  • Linux編程
    +關注

    關注

    0

    文章

    5

    瀏覽量

    617
收藏 人收藏

    評論

    相關推薦

    C語言標準的基本使用

    寫出看起來專業的C代碼,除了規范的變量/函數命名,還需要熟練使用C語言的標準。當為了數組拷貝自己編寫
    發表于 09-14 14:04 ?697次閱讀

    介紹C語言編寫的硬件外設訪問

    今天要介紹的開源軟件叫 c-periphery,C 語言編寫的硬件外設訪問。
    的頭像 發表于 10-26 10:36 ?1238次閱讀
    介紹<b class='flag-5'>一</b><b class='flag-5'>個</b>用<b class='flag-5'>C</b><b class='flag-5'>語言</b>編寫的硬件外設訪問<b class='flag-5'>庫</b>

    自己如何利用C語言封裝TRACE函數?

    自己如何利用C語言封裝TRACE函數?
    發表于 10-18 09:03

    如何利用C語言去編寫單片機程序

    C語言和匯編語言有哪些差異?如何利用C語言去編寫單片機程序
    發表于 11-02 09:59

    靜態的優點及其靜態的使用解析

    、靜態優點:運行快,發布程序無需提供靜態,因為已經在app中,移植方便缺點:更新慢 繁瑣1、靜態
    發表于 02-17 07:45

    如何利用C語言去調用rust靜態

    持續。rust整個結構還不是特別清晰,特別是和wrapper相關的同C項目,包含多個rust的靜態,
    發表于 06-21 10:27

    100經典C語言程序

    c語言編寫,c語言的100經典程序,單片機的應用,開發利用
    發表于 12-17 11:46 ?11次下載

    數碼管(靜態顯示)【C語言版】

    數碼管(靜態顯示)【C語言版】數碼管(靜態顯示)【C語言版】數碼管(
    發表于 12-29 15:27 ?0次下載

    數碼管(靜態顯示)【C語言+匯編版】

    數碼管(靜態顯示)【C語言+匯編版】,多種集合,符合C語言和匯編愛好者學習。
    發表于 12-31 10:16 ?0次下載

    學習C語言的目標和方法有哪些及C語言的關鍵字說明

     、學習C語言的目標主要是:1. 熟練掌握C語言的關鍵字,語法規則,程序控制等;2. 掌握基本的數據結構,數組、鏈表、棧和隊列等;3. 掌
    發表于 08-02 17:34 ?1次下載
    學習<b class='flag-5'>C</b><b class='flag-5'>語言</b>的目標和方法有哪些及<b class='flag-5'>C</b><b class='flag-5'>語言</b>的關鍵字說明

    試圖構建便于適配不同平臺mcu的通用

    試圖構建便于適配不同平臺mcu的通用
    發表于 11-26 15:21 ?10次下載
    試圖<b class='flag-5'>構建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>便于適配不同平臺mcu的通用<b class='flag-5'>庫</b>

    C語言宏定義與預處理、函數和函數

    目錄前言、C語言預處理二、宏定義三、函數四、函數五、自己制作靜態鏈接(ubuntu 環境下
    發表于 12-07 21:06 ?2次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>宏定義與預處理、函數和函數<b class='flag-5'>庫</b>

    靜態和動態的生成以及使用(樹莓派)

    、靜態優點: 運行快,發布程序無需提供靜態,因為已經在app中,移植方便缺點:更新慢 繁瑣1、
    發表于 12-22 18:44 ?0次下載
    <b class='flag-5'>靜態</b><b class='flag-5'>庫</b>和動態<b class='flag-5'>庫</b>的生成以及使用(樹莓派)

    C語言動態靜態

    C語言動態靜態
    的頭像 發表于 02-06 09:45 ?1361次閱讀

    Linux中的靜態和共享

    二進制文件,包含的代碼可被程序調用。例如標準C、數學、線程
    的頭像 發表于 05-10 09:34 ?1036次閱讀
    主站蜘蛛池模板: 亚洲精品久久午夜麻豆| 男女AA片免费| 国产亚洲精品久久久999蜜臀| 成人毛片18岁女人毛片免费看| 99久久精品国产国产毛片| 6080yy 久久 亚洲 日本| 在线观看中文| 2017天天拍天天拍香蕉视频| 最近的2019中文字幕HD| 中文字幕在线久热精品| 19不插片免费视频| 7m凹凸国产刺激在线视频| 97成人免费视频| 9LPORM原创自拍达人| 扒开黑女人p大荫蒂老女人| 被老师按在办公桌吸奶头| 顶级少妇AAAAABBBBB片| 国产高清精品国语特黄A片| 国产亚洲精品久久7777777| 黑色丝袜美女被网站| 久久久精品久久久久三级| 伦理片秋霞免费影院| 欧美人妖12p| 涩涩爱涩涩电影网站| 亚洲AVAV天堂AV在线网爱情| 亚洲男人97色综合久久久| 云南14学生真实初次破初视频| 51精品国产AV无码久久久密桃| 99无人区码一码二码三| 高龄熟女50P| 黄色网址在线看| 名女躁b久久天天躁| 肉多荤文高h羞耻校园| 亚洲国产成人爱AV在线播放丿| 艳照门在线观看| 99视频免视看| 国产精品久久久久久免费字体| 黄色软件色多多| 浓毛BWBWBWBWBW日本| 天堂so导航| 伊人久久久久久久久久|