linux学习-1简析静态库与动态库的区别与联系

网友投稿 987 2022-05-30

1简介

我们知道从源代码到可执行程序的转换需要经历编译、汇编以及链接,或者可以简单的理解成2步,编译和链接。通过编译,可以将每个源文件生成一个目标文件(即.c/.cpp -> .o文件)

2静态库与动态库

首先什么是库文件呢?库文件是就是一种可执行代码的二进制格式,可以被载入到内存中执行,具体可以分为静态库文件以及动态库文件,二者同时存在同名文件,优先调用动态库文件。

2.1静态库

(1)命名方式:静态库即.a文件,一般命名为lib+库名.a。

(2)特点:由于静态库文件包含所有数据以及函数因此静态库文件比较大。正因如此,其可以脱离源文件执行,即删除相关C文件之后仍可执行,实际上作用于目标文件(.o).

(3)载入时刻:编译的时候直接别嵌入到可执行文件中。

(4)生成指令:可略有不同

ar -rc libxxx.a xxx.o

2.2动态库:

(1)命名方式:动态库即.so文件,一般命名为lib+库名.so。

(2)特点:动态库相比静态库要小很多,但其依赖源文件,一旦删除源文件将无法执行

(3)载入时刻:可执行程序运行时才被载入内存。

(4)生成指令

gcc -fPIC -shared xxx.c -o libxxx.so,其中-fPIC 指的是位置无关即载入时重定位

(5)注意:调用时注意其路径,一般在linux默认生成在usr/lib下

3 gcc常用选项列表

(1) -c :只编译,不链接,生成目标文件“.o”。

(2) -S :只编译,不汇编,生成汇编代码”.s”。

(3) -E :只进行预编译。

(4) -o file:把输出文件输出到file里。

(5) -o0 不进行优化处理、-o或-o1优化生成代码

linux学习-1简析静态库与动态库的区别与联系

(6) -shared 生成共享目标文件,通常构建动态库

(7) -g :在可执行程序中包含标准调试信息。

(8) -v :打印出编译器内部编译各过程的命令行信息和编译器的版本。

(9) -I dir :在头文件的搜索路径列表中添加dir目录

(10)-L dir :在库文件的搜索路径列表中添加dir目录

(11)-static :连接静态库(静态库也可以用动态库链接方式链接)

(12)-llibrary :连接名为library的库文件

选项以及警告等更加详细的内容参考https://blog.csdn.net/gatieme/article/details/21389603

Linux 汇编语言

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:华为大数据解决方案功能组件介绍
下一篇:区块链技术开发 建立商城系统的几大优势
相关文章