女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

靜態鏈接和靜態庫

學益得智能硬件 ? 來源:學益得智能硬件 ? 2023-02-08 14:17 ? 次閱讀
什么是靜態鏈接? C語言的編譯分為四個步驟,預處理、編譯、匯編、鏈接,其中鏈接又分為動態鏈接和靜態鏈接。
所謂靜態鏈接,就是把庫實現的代碼整合到最終的二進制文件中,這樣的二進制文件會比較大,因為里面既包含了自己寫的代碼,又包含了調用的庫的代碼。
但是好處就是程序在運行的時候,不需要庫的支持。
我們就用mini2440這塊開發板來演示下。
61977146-a777-11ed-bfe3-dac502259ad0.png ?開發板上的文件系統是我自己制作的,簡單到只有一些基本的命令可以用,也沒有移植C庫。
#include 


int main()
{
    printf("helloworld
");


    return 0;
}

來個helloworld,先使用動態編譯。
[root@turbo ~]# arm-linux-gcc test.c -o test


[root@turbo ~]#
然后把程序傳輸到開發板上,但是程序根本跑不起來。
61e378a2-a777-11ed-bfe3-dac502259ad0.png ?因為動態鏈接程序在運行的時候需要庫的支持,開發板上什么都沒有。
還是同樣的程序,改成靜態編譯。
[root@turbo ~]# arm-linux-gcc test.c -o test -static


[root@turbo ~]#

再次拷貝到開發板上運行,這一次程序順利輸出了helloworld。
62019ea4-a777-11ed-bfe3-dac502259ad0.png ?所以有些場景下,靜態鏈接還是挺有用的。
說到靜態鏈接,就必須要提到靜態庫,因為靜態鏈接鏈接的就是靜態庫。
如何制作靜態庫?
先來個hello.c,在主函數中調用print函數。
#include 


int main()
{
print();
    return 0;
}
在print.c中實現print函數。
#include 


void print()
{
    printf("this is test ...
");
}
第一步,對print.c做匯編操作。
gcc -c print.c
會自動生成print.o。然后把print.o做成靜態庫。
ar -crv libprint.a print.o
這里的libprint.a就是最終生成的靜態庫。
接下來就跟print.c沒有關系了,把它刪了也行。

編譯hello.c的時候,需要使用靜態編譯,并且鏈接靜態庫。
gcc hello.c -o hello -static -lprint -L .
參數有點多,static表示靜態編譯,小寫的l表示庫的名字,大寫的L表示庫的路徑。
最終生成的二進制文件hello,即使放在一個沒有libprint.a庫的環境下也能運行。
靜態編譯在嵌入式開發中應用很多,尤其是環境比較惡劣的情況下,有了靜態編譯,可以省去移植好多庫。


審核編輯 :李倩


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

    關注

    2

    文章

    803

    瀏覽量

    42122
  • 靜態鏈接
    +關注

    關注

    0

    文章

    5

    瀏覽量

    5978

原文標題:靜態鏈接和靜態庫

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    靜態鏈接和動態鏈接

    一、靜態鏈接靜態鏈接通過靜態進行鏈接,生成的目標程
    發表于 08-27 10:20

    動態和靜態的區別

    .so區分一個概念:是包含前綴lib以及后綴.a或者.so的一個整體名是去掉前綴和后綴剩下的部分四、動態和靜態的特點
    發表于 05-26 17:22

    Linux下動態和靜態的制作及使用

    可執行代碼的二進制格式,可以被載入內存中執行。根據鏈接時期的不同,又有:靜態和共享(動態
    發表于 11-18 17:05

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

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

    課題三_基本共射極放大電路的組成和靜態分析(2學時)

    基本共射極放大電路的組成和靜態分析基本共射極放大電路的組成和靜態分析
    發表于 11-13 17:00 ?0次下載

    你知道linux 靜態和共享

    靜態鏈接庫和動態鏈接庫的區別在于,主程序在運行前,靜態鏈接庫鏈接固定寫入在程序中,而動態
    發表于 04-26 16:46 ?3016次閱讀

    關于堆棧和靜態以及動態內存的理解

    全局區(靜態區)(static)—,全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量、未初始化的靜態變量在相鄰的另一塊區域。 - 程序結
    的頭像 發表于 05-03 14:12 ?2810次閱讀

    GCC程序編譯的靜態鏈接和動態鏈接

    靜態鏈接使用靜態進行鏈接,生成的程序包含程序運行所需要的全部,可以直接運行,不過
    的頭像 發表于 11-12 15:50 ?2965次閱讀
    GCC程序編譯的<b class='flag-5'>靜態</b><b class='flag-5'>鏈接</b>和動態<b class='flag-5'>鏈接</b>

    講解Linux虛擬機之使用動態和靜態

    了解 Linux 如何使用,包括靜態和動態的差別,有助于你解決依賴問題。
    發表于 05-06 17:05 ?2418次閱讀
    講解Linux虛擬機之使用動態<b class='flag-5'>庫</b><b class='flag-5'>和靜態</b><b class='flag-5'>庫</b>

    嵌入式Linux下動態和靜態使用

    以下主要介紹Linux 下動態靜態、如何使用已有的動態, 以及如何制作一個動態。Linux下的動態
    發表于 11-01 16:57 ?1次下載
    嵌入式Linux下動態<b class='flag-5'>庫</b><b class='flag-5'>和靜態</b><b class='flag-5'>庫</b>使用

    Linux下動態和靜態制作與調用

    靜態是指在應用中,有一些公共代碼需要反復使用,就把這些代碼編譯為“”文件;在鏈接步驟中,連接器將從文件取得所需的代碼,復制到生成的可執
    的頭像 發表于 08-24 15:03 ?4133次閱讀
    Linux下動態<b class='flag-5'>庫</b><b class='flag-5'>和靜態</b><b class='flag-5'>庫</b>制作與調用

    動態和靜態的制作步驟

    是一種可執行的二進制文件,是編譯好的代碼。使用可以提高開發效率。在 Linux 下有靜態和動態
    的頭像 發表于 07-27 11:00 ?1030次閱讀

    基本放大電路中靜態和靜態工作點一樣嗎?

    基本放大電路中靜態和靜態工作點一樣嗎?? 基本放大電路是指通常用于信號放大和增強的電路,它是電子工程中最基本的電路之一。在基本放大電路中,靜態和靜態工作點都是非常重要的概念,但它們
    的頭像 發表于 09-13 14:17 ?2168次閱讀

    動態電路和靜態電路的區別

    動態電路和靜態電路的區別 動態電路和靜態電路是電路的兩種基本類型,它們在電子設備中的作用與應用不同。本文將詳細介紹動態電路和靜態電路的區別。 1. 概述 靜態電路和動態電路都是電子電路
    的頭像 發表于 09-17 10:47 ?5665次閱讀

    有源負載和靜態負載的區別是什么?

    有源負載和靜態負載的區別是什么?? 有源負載和靜態負載是電子領域中兩種常見的負載。在電路中,負載是指電路輸出能力的消耗者。在這篇文章中,我們將介紹有源負載和靜態負載之間的區別。 1. 有源負載
    的頭像 發表于 09-18 18:20 ?2301次閱讀