当前位置: 首页 > news >正文

太原做网站的公司网站建设山东青岛网站制作

太原做网站的公司网站建设,山东青岛网站制作,网站设计就业前景如何,用树莓派做网站服务器速度快吗在一个软件项目中,为了完成特定功能,除了自定义函数,还可以使用别人已经封装好的函数库,如 C 函数库。库函数的使用避免了重复“造笼子”的重复工作,提高了代码复用率,大大减轻了软件开发的工作量。 库分为…

在一个软件项目中,为了完成特定功能,除了自定义函数,还可以使用别人已经封装好的函数库,如 C 函数库。库函数的使用避免了重复“造笼子”的重复工作,提高了代码复用率,大大减轻了软件开发的工作量。

库分为静态库和动态库。

  • 静态库。如果在项目中引用了库函数,则在编译时,链接器会将引用的函数代码或变量,链接到可执行文件里,和可执行程序组装在一起,这种库被称为静态库,即在编译阶段链接的库。
  • 动态库。在编译阶段不参与链接,不会和可执行文件组装在一起,而是在程序运行时才被加载到内存参与链接,因此又叫动态链接库。

静态库的本质其实就是可重定位目标文件的归档文件,使用 ar 命令就可以将多个目标文件打包为一个静态库。

jiaming@jiaming-pc:~/Documents/CSDN_Project$ cat test.c 
int add(int a, int b)
{return a + b;
}
int sub(int a, int b)
{return a - b;
}
int mul(int a, int b)
{return a * b;
}
int div(int a, int b)
{return a / b;
}jiaming@jiaming-pc:~/Documents/CSDN_Project$ cat main.c
#include <stdio.h>int add(int, int);int main(void)
{int sum = 0;sum = add(1, 2);printf("sum=%d\n", sum);return 0;
}
jiaming@jiaming-pc:~/Documents/CSDN_Project$ gcc -c test.c # 将源文件 test.c 生成目标文件 test.o
jiaming@jiaming-pc:~/Documents/CSDN_Project$ ar -rcs libtest.a test.o # 使用 ar 命令将多个目标文件打包成 libtest.a
jiaming@jiaming-pc:~/Documents/CSDN_Project$ gcc main.c -L. -ltest # 指定需要链接的静态库及其所在的路径,库的名字 test
jiaming@jiaming-pc:~/Documents/CSDN_Project$ ./a.out 
sum=3

ar 命令:

  • -c:禁止在创建库时产生的正常消息
  • -r:如果指定的文件已经存在则替换
  • -s:无论库是否更新都强制重新生成新的符号表
  • -d:从库中删除指定的文件
  • -o:对压缩文档成员进行排序
  • -q:向库中追加指定文件
  • -t:打印库中的目标文件
  • -x:解压库中的目标文件

编译器是以源文件为单位进行编译程序的,链接器在链接过程中逐个对目标文件进行分解组装,这样会产生一个问题:如果在一个源文件中定义了 100 个函数,而只使用了其中一个,那么链接器在链接时也会把这 100 个函数逇代码指令全部组装到可执行文件中,这会让最终生成的可执行文件体积大大增加。

jiaming@jiaming-pc:~/Documents/CSDN_Project$ readelf -s a.out Symbol table '.symtab' contains 70 entries:Num:    Value          Size Type    Bind   Vis      Ndx Name···50: 000000000000118b    24 FUNC    GLOBAL DEFAULT   16 add···53: 00000000000011d0    23 FUNC    GLOBAL DEFAULT   16 div···64: 0000000000001149    66 FUNC    GLOBAL DEFAULT   16 main65: 00000000000011b9    23 FUNC    GLOBAL DEFAULT   16 mul···68: 00000000000011a3    22 FUNC    GLOBAL DEFAULT   16 sub···

解决这个问题的办法是每一个函数均由一个独立的 C 程序实现,然后将多个文件(.o)打包即可(libtest.a)。C 标准库就是这么实现的,printf 函数由 printf.c 实现。如果只调用了一个 printf 函数,则链接器只是将 pritnf() 函数的目标文件链接到可执行文件中即可。

静态链接还会产生另外一个问题,如 C 标准库里 printf() 函数,可能多个程序都调用了它,链接器在链接时就要将 printf 的指令添加到多个可执行文件中。在一个多任务环境中,当多个进程并发运行时,内存中有大量重复的 printf 指令代码,很浪费内存资源。

解决办法是动态链接机制!

http://www.yayakq.cn/news/697024/

相关文章:

  • 长沙做门户网站的公司wordpress底部导航
  • 织梦技术个人网站模板下载农产品网络推广方案
  • vs2008做网站网站空间租用费用
  • 用wampserver搭建网站网站建设费能入长期待摊吗
  • 重庆做营销型网站公司郑州网络推广软件
  • vue可以做pc的网站网站前端用什么语言
  • 做网站和做app哪个容易黑龙江中国建设监理协会网站
  • sae 网站备案信息南浦电商网站建设
  • asp.net做的网站文字控件随窗口大小不变化域名备案信息查询系统
  • 做健身网站网站聚合怎么做
  • 软件开发和网站建设一样吗长春关键词搜索排名
  • 站长工具排名查询网络营销薪酬公司
  • 新手怎么优化网站扬州网站建设价格
  • 论坛型网站怎么做的专业网页制作费用
  • 中国免费网站建设空投网站建设
  • 惠州网站制作找哪家导视设计英文
  • 做网站设计提成赚钱吗制作一个软件
  • 网站开发经常遇到的问题网站建设实践描述
  • phpcms网站logo政协门户网站建设方案
  • 高校图书馆网站建设网站开发技术都有哪些
  • 怎么在网站上做404页面怎么搭建一个电商平台
  • 网站建设技能考试网站制作都包括什么
  • 小网站关键词搜什么trs网站建设平台
  • 南阳建设局网站如何使用电子商务网站
  • 做一个高端网站多少钱wp如何做引擎网站
  • 公司网站建设工作重点有网但是网页打不开是什么原因
  • 做网站用中文路径青岛建设网站制作
  • 源码之家 网站模板小米网站建设书
  • 网站建设静态部分总结学校网站怎么做的好坏
  • 有没有做羞羞事的网站做游戏代练去那个网站