国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【Linux】用gcc生成靜態庫和動態庫

2019-11-08 03:08:37
字體:
來源:轉載
供稿:網友

linux下的庫有兩種:靜態庫和共享庫(動態庫)。二者的不同點在于代碼被載入的時刻不同。 靜態庫在程序編譯時會被連接到目標代碼中,目標程序運行時將不再需要該動態庫,移植方便,體積較大,但是浪費空間和資源,因為所有相關的對象文件與牽涉到的庫被鏈接合成一個可執行文件。 動態庫在程序編譯時并不會被連接到目標代碼中,而是在程序運行時才被載入,因此體積較小,可以實現進程間的資源共享,甚至可以真正做到鏈接載入完全由程序員在程序代碼中控制,另外將一些程序的升級變得簡單,但是在程序運行時需要動態庫存在.

在Linux中靜態庫均以.a為文件名后綴,動態庫均以.so為文件名后綴

首先先寫三個代碼,hello.h

#ifndef _HELLO_H#define _HELLO_Hvoid hello(const char* str);#endifhello.c

#include<stdio.h>void hello(const char * str){	PRintf("hello %s/n",str);}test.c

#include"hello.h"int main(){	hello("sgc");	return 0;}gcc生成靜態庫我們用gcc -o 來編譯test.c發現不能成功,因為test.c不能把hello.c里內容也一同編譯

下面我們將hello.c用gcc -c 生成一個編譯文件

ls

生成了一個hello.o文件

下面我們用指令將hello.o生成一個靜態庫libmyhello.a文件,與庫文件中文件命名要統一

指令 ar -r libmyhello.a hello.o

ls后發現系統中多了一個libmyhello.a文件

執行

gcc -o test test.c libmyhello.a

生成test,執行./test

hello sgc

使用 ar -t libmyhello.a查看靜態庫libmyhello.a中包含的文件

hello.o

gcc生成動態庫

執行兩條命令

gcc -shared -fPIC -c hello.cgcc -shared -fPIC -o libmyhello.so hello.o

即可生成一個動態庫libmyhello.so

執行命令

gcc -o hello main.c -L. -lmyhello

生成hello文件

./hello后

hello sgc


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 周口市| 阿城市| 遂川县| 定远县| 乌审旗| 灵武市| 上林县| 万荣县| 泉州市| 临武县| 札达县| 长治县| 盖州市| 朝阳区| 盐池县| 冕宁县| 钟祥市| 桐乡市| 尉犁县| 宣恩县| 缙云县| 新源县| 邵阳县| 金华市| 广水市| 泾源县| 察隅县| 东光县| 睢宁县| 芦溪县| 贵阳市| 合山市| 淮阳县| 林西县| 青河县| 齐齐哈尔市| 梁河县| 延庆县| 三江| 稷山县| 搜索|