1.软文推荐

2.软文推荐

3.软文推荐

在Linux系统中通常有两种函数库:动态函数库和静态函数库,分别以.so和.a为后缀名,下面良许教程网为大家讲解一下Linux系统静态函数库和动态函数库

静态函数库

 对于静态函数库:在编译链接时候,程序所需要的函数会从静态函数库中拷贝到执行文件中。当程序运行的时候,就不需要链接外部的函数库了。

       1、静态函数库是多个目标文件*.o的集合

  2、可以使用ar命令(archiver)来生成.a文件

   gcc -c part_a.c
   gcc -c part_b.c
   ar -r libtest.a part_a.o part_b.o

  3、若要使用静态函数库中的函数,只需包含这些函数的声明头文件,并在编译时候指明静态函数库的名字,编译器会自从将函数拷贝到目标文件中。

  4、生成的函数库的命名规范为:lib+函数库名。如,要生成一个test的函数库,则命名为libtest.a

  示例:

  (1)、分别创建三个文件:main.c、part_a.c、part_b.c

 #include 
 #include "part_a.h"
 
 int print_part_a(void)
 {
     printf("part A
");
     return 0;    
 }

 #include 
 #include "part_b.h"
 
 int print_part_b(void)
 {
         printf("part B
");
     return 0;    
 }

 #include 
 #include "part_a.h"
 #include "part_b.h"
 
 int main(void)
 {
     print_part_a();
     print_part_b();
     return 0;
 }

  (2)、这里,我们创建三个目录:src、include、lib,分别存放源文件、头文件、库文件,然后生成的目标文件就存放在当前目录

  (3)、编写Makefile

 INCLUDE += -I./include
 SRC += ./src
 LIB += ./lib
 
 LIB_FILE += $(LIB)/libtest
 
 all: lib
     gcc $(INCLUDE) -o main $(SRC)/main.c -L$(LIB) -ltest        
 
 lib: $(SRC)/part_a.o $(SRC)/part_b.o
     ar -r $(LIB_FILE).a $(FILE_A_OBJ) $(FILE_B_OBJ)    
 
 $(SRC)/part_a.o: $(SRC)/part_a.c
     gcc $(INCLUDE) -c $(SRC)/part_a.c
 
 $(SRC)/part_b.o: $(SRC)/part_b.c
     gcc $(INCLUDE) -c $(SRC)/part_b.c

  (4)、执行./main文件,就会先后打印print_part_a()函数和print_part_b()函数的内容了

   分析:我们用命令objdump -S main和objdump -S libtest.a进行反汇编查看可知,此时可执行文件main中已经拷贝了静态函数库的函数了。

动态函数库(暂无。。)

  对于动态函数库:在编译链接时,程序所需要的函数不会从动态函数库中拷贝出来,而是在程序运行的时候,才会将所需要的函数加载进来。

四、本文用到的命令及相关参数

  gcc命令相关参数分析:

  1、-Idirname :-I (注:是大I)可以指定头文件路径为dirname(./表示当前路径  ../表示上一级目录),并将其加入到程序头文件目录列表中。

    例如:假设头文件所在的目录为include,那么输入参数就为:-I ./include

  2、-c :(注:是小c)只进行预编译、汇编,生成目标文件.o

  3、-Ldirname:-L 将所指出的目录dirname加入到程序函数库的目标列表中,即告诉链接脚本先到-L指定的目录中寻找,然后到系统默认路径中寻找。

    例如:指定当前目录,则输入参数为:-L .

  4、-lname:-l (注:是小L)可以指定链接时装载名为libname.a的函数库。

    例如:若需要一个名为libtest.a的函数库,则输入参数为:-ltest

  ar命令相关参数分析:

  1、-r:将文件插入到库文件中

  2、-c:建立库文件

  3、-t:显示库文件中所包含的文件

  4、-d:删除库文件中指定的成员文件

以上就是良许教程网为各位朋友分享的Linux系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你!

本文来源:www.lxlinux.net/2155.html,若引用不当,请联系修改。

相关文章 8

1

详解Git版本回退 39秒前

以前,如果是要去除某一块功能,我都是选择性删除,选择性注释,然后前后逻辑各种查看,各种比较。每一次,改完这些我总感觉心好累...

2

百度云老用户(百度云老用户活动) 3分钟前

目录:1、百度网盘包3月份购买的包季从多会算2、百度网盘开通会员的费用是多少?3、百度网盘怎么收费4、百度网盘普通用户是2068G为什么...

3

分享一下Python 3.9.0新特性 6分钟前

Python 3.9.0 最终版本于2020年10月5号发布。像多数Python爱好者一样,我非常兴奋地探索着最新的功能,本文将为大家展示4个有趣的新特征。 ...

4

详解c++11中std::move函数实用方法 7分钟前

本文主要介绍了c++11中std::move函数的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 C++1...

5

包含todesk是什么意思的词条 9分钟前

目录:1、todesk是什么软件2、todesk别人做什么我看得到吗3、todesk设备列表数2台是什么意思todesk是什么软件 ToDesk是一款安全免费不限速的远程...

6

讲解一下正则表达式 语法 12分钟前

正则表达式,又称规则表达式,是一种文本模式,通常用来检索、替换和控制文本。主要包括a 到 z 的字母以及一些特殊的元字符。 正则表...

7

Linux上使用的10种云备份方案 13分钟前

不久前,为用户提供一种备份远程机器上数据的简易方法还很稀奇。现在,我们已觉得这理所当然。Dropbox及其他公司简化了这项任务。苹果...

8

香港母鸡推荐(香港的鸡怎么做的) 15分钟前

目录:1、老母鸡的肉怎么吃2、哪里有稳定的香港母机服务器3、“母鸡呀~”是哪的话?什么意思?4、什么鸡最好吃5、香港母鸡服务器,切...