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

靜態(tài)鏈接和動(dòng)態(tài)鏈接

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

一、靜態(tài)鏈接

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

二、動(dòng)態(tài)鏈接

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

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

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

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;

}

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

#include<stdio.h>

#include"mymath.h"

void main()

{

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

}

然后進(jìn)行編譯,因?yàn)閠est引用了mymath.h,所以不能單獨(dú)編譯,gcc test.c mymath.c一起進(jìn)行,否則就會(huì)報(bào)錯(cuò)。(如下編譯正確)

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

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

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

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

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

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
AFBR-79EQDZ 1 Avago Technologies FIBER OPTIC TRANSCEIVER, 840-860nm, PANEL MOUNT, MTP CONNECTOR, ROHS COMPLIANT, PACKAGE-38
$210.12 查看
NC7S14P5X 1 Fairchild Semiconductor Corporation Inverter, HC Series, 1-Func, 1-Input, CMOS, PDSO5, 1.25 MM, EIAJ, SC-88A, SC-70, 5 PIN
$0.29 查看
FTLX1471D3BCL 1 Finisar Corporation Transceiver, 1260nm Min, 1355nm Max, 10300Mbps(Tx), 10300Mbps(Rx), LC Connector, Panel Mount, ROHS COMPLIANT PACKAGE
$542.94 查看
飛凌嵌入式

飛凌嵌入式

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

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

查看更多

相關(guān)推薦