• 正文
    • 一、靜態(tài)鏈接
    • 二、動態(tài)鏈接
  • 推薦器件
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

靜態(tài)鏈接和動態(tài)鏈接

2024/08/27
1488
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

一、靜態(tài)鏈接

靜態(tài)鏈接通過靜態(tài)庫進(jìn)行鏈接,生成的目標(biāo)程序中包含運行需要的所有庫,可以直接運行,不過就是文件比較大。靜態(tài)庫是匯編產(chǎn)生的.o文件的集合,一般以.a文件形式出現(xiàn)。gcc在使用靜態(tài)鏈接的時候需要加上-static參數(shù)。

二、動態(tài)鏈接

動態(tài)鏈接使用動態(tài)鏈接庫進(jìn)行鏈接,生成的程序在執(zhí)行的時候需要加載所需要的動態(tài)庫才能運行,動態(tài)鏈接程序輕便,但必須依賴動態(tài)庫。Linux下的動態(tài)鏈接庫實際上是共享目標(biāo)文件,一般是以.so文件形式存在。GCC默認(rèn)是動態(tài)鏈接不需要加參數(shù)。

舉例子看一下動態(tài)鏈接庫的使用方法,創(chuàng)建三個C語言文件:mymath.c、mymath.h、test.c。

通過兩個變量相加的方式來舉例說明。

mymath.h添加內(nèi)容如下:

#ifndef __MYMATH_H_

#define __MYMATH_h_

#include<stdio.h>

extern int add(int a,int b);

#endif

mymath.c添加內(nèi)容如下:

#include "mymath.h"

int add(int a,int b)

{

return a+b;

}

最后來一個測試文件 test.c(在這里需要注意的一個小細(xì)節(jié),調(diào)用自己寫的.h文件時,必須使用雙引號,“xxxx.h”):

#include<stdio.h>

#include"mymath.h"

void main()

{

printf("2+3=%dn",add(2,3));

}

然后進(jìn)行編譯,因為test引用了mymath.h,所以不能單獨編譯,gcc test.c mymath.c一起進(jìn)行,否則就會報錯。(如下編譯正確)

接下來是生成動態(tài)鏈接庫的方法,gcc -shared xx -o xxx.so,當(dāng)我們使用cat去進(jìn)行查看的時候會發(fā)現(xiàn),so文件里全是亂碼,這就是使用動態(tài)鏈接庫的一個好處,可以防止核心算法的泄露。

現(xiàn)在就可以將mymath.c刪除掉了:

直接調(diào)用庫編譯發(fā)現(xiàn)程序不能運行。

下面將我們自己建立的庫移動到/usr/lib目錄下試試,然后發(fā)現(xiàn)代碼運行成功。

可以在Linux系統(tǒng)下自己嘗試下。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
ASDMB-50.000MHZ-LY-T 1 Abracon Corporation MEMS OSC XO 50.0000MHZ LVCMOS
$3.02 查看
SN74LVC1G125DCKT 1 Texas Instruments Single 1.65-V to 5.5-V buffer with 3-state outputs 5-SC70 -40 to 125

ECAD模型

下載ECAD模型
$0.9 查看
SN74LVC1G17DBVR 1 Rochester Electronics LLC Buffer,
$0.13 查看
飛凌嵌入式

飛凌嵌入式

保定飛凌嵌入式技術(shù)有限公司,創(chuàng)建于2006年,是一家專注嵌入式核心控制系統(tǒng)研發(fā)、設(shè)計和生產(chǎn)的高新技術(shù)企業(yè),是國內(nèi)較早專業(yè)從事嵌入式技術(shù)的企業(yè)之一。 經(jīng)過十幾年的發(fā)展與積累,公司擁有業(yè)內(nèi)優(yōu)秀的軟硬件研發(fā)團隊,在北京及保定建立兩大研發(fā)基地,在蘇州、深圳設(shè)有華東、華南技術(shù)服務(wù)中心,并在北美、歐洲以及亞太等其他國家和地區(qū)擁有國際業(yè)務(wù)網(wǎng)絡(luò)。公司研發(fā)的智能設(shè)備核心平臺廣泛應(yīng)用于物聯(lián)網(wǎng)、工控、軌道交通、醫(yī)療、電力、商業(yè)電子、智能家居、安防、機器人、環(huán)境監(jiān)測等諸多領(lǐng)域。

保定飛凌嵌入式技術(shù)有限公司,創(chuàng)建于2006年,是一家專注嵌入式核心控制系統(tǒng)研發(fā)、設(shè)計和生產(chǎn)的高新技術(shù)企業(yè),是國內(nèi)較早專業(yè)從事嵌入式技術(shù)的企業(yè)之一。 經(jīng)過十幾年的發(fā)展與積累,公司擁有業(yè)內(nèi)優(yōu)秀的軟硬件研發(fā)團隊,在北京及保定建立兩大研發(fā)基地,在蘇州、深圳設(shè)有華東、華南技術(shù)服務(wù)中心,并在北美、歐洲以及亞太等其他國家和地區(qū)擁有國際業(yè)務(wù)網(wǎng)絡(luò)。公司研發(fā)的智能設(shè)備核心平臺廣泛應(yīng)用于物聯(lián)網(wǎng)、工控、軌道交通、醫(yī)療、電力、商業(yè)電子、智能家居、安防、機器人、環(huán)境監(jiān)測等諸多領(lǐng)域。收起

查看更多

相關(guān)推薦