国产探花免费观看_亚洲丰满少妇自慰呻吟_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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新晃| 苏尼特右旗| 青铜峡市| 永胜县| 铁力市| 独山县| 饶平县| 灌阳县| 上蔡县| 福安市| 梧州市| 嵊州市| 武冈市| 张北县| 阜宁县| 威海市| 两当县| 尤溪县| 来安县| 临武县| 阿尔山市| 漳州市| 伊金霍洛旗| 安泽县| 林口县| 东宁县| 黄陵县| 江达县| 界首市| 佛坪县| 芒康县| 新晃| 绩溪县| 松滋市| 保康县| 武穴市| 澄迈县| 富阳市| 安国市| 泾源县| 桐乡市|