zoukankan      html  css  js  c++  java
  • 第6课-函数库设计

    1.Linux下的应用程序所需要的外部函数可以由函数可和系统调用提供。
    2.函数库是处于用户态的,由工作人员编写的函数的集合,而系统调用是由Linux内核实现的。
    3.函数库分为静态和动态,按照链接方式划分的。动态函数库比静态节约空间。使用静态函数库以后应用程序最终会包含自身和函数库,在内存中运行的时候就会有多个函数可的拷贝,导致在空间上的浪费。而动态函数库则在内存中只有一个拷贝,供多个都会使用到的程序使用。
    4.Linux使用的函数库一般都是在/lib或者在/usr/lib,以*.so*命名的,是动态函数库,以*.a命名的是静态函数库。
    5.Linux进行链接默认使用动态函数库,要使用静态函数库,必须显示指明-static选项。
    6.可以使用readelf -d 命令查看程序所使用的函数库。
    7.-l表示查找某一个库,如-lc是查找c库,而静态c库一般都以libc.a命名。
    8. 有些Linux发行版默认不提供某些静态库。
    9.制作静态函数库
    (1)编写好你要制作库的函数,写在.c文件
    (2)编译.c文件,使用-c选项,只编译不链接,生成中间.o文件
    (3)使用ar命令将中间.o文件打包成库文件(.a)
    (4)将生成的库文件复制到/usr/lib目录下
    (5)要使用自己的库函数,在编译的时候要显示的指明,用-l(name)选项,Linux只使用c库。

    10.库文件的命名:
    libname.a
    libname.so
    11.动态函数库设计(共享库)。使用的时同样要显示指定引用的库。-lname选项、

    我看完了 静态和动态函数库的设计 这部分的视频。有一点不明白。
    我先说一下我的理解:
    函数库分为动态和静态两种,更直观一点来说,在文件上分为.a和 .so 。
    我现在写了一个函数——add.c,功能很简单,就是实现两个整形数据的加法。
    这个函数我可以把它编译成动态函数库,也可以把它编译成静态函数库,分别命名为libmyadd.so和libmyadd.a.
    我现在只想使用动态库函数,所以我将上面的libmyadd.so放到/usr/lib中。
    我又写了一个文件——main.c,在该文件中将会调用上面的add功能。
    在编译main.c时,
    如果使用命令  gcc main.c -lmyadd -o test 进行编译,很显然,它会默认动态链接libmyadd.so,生成的目标文件test会很小。
    如果使用命令  gcc -static main.c -lmyadd -o test 进行编译呢,动态库文件libmyadd.so能否以静态的方式编译进目标文件test中呢?
    同理,我如果只把静态库文件libmyadd.a放入 /usr/lib中,但是编译时却使用默认的动态链接方式,是否能成功呢?
    再者,我把上面的两个动态和静态库文件都放在/usr/lib中,那么,执行命令gcc main.c -lmyadd -o test 时,编译器默认会使用那个库文件呢?
    加上static参数之后呢?
    总之,对于动态链接、静态链接、动态库文件、静态库文件 之间的对应关系不是很明白。

  • 相关阅读:
    技术周刊 · 耿耿星河欲曙天 | SpaceX 上的前端架构;跨平台新选择;开源世界的新“大门”;用户推荐算法的敲门砖……
    说说SVG的feTurbulence滤镜
    机器学习进阶
    小程序与动画的故事
    技术周刊 · 迢迢山径峻 | Web 开发成长图谱;下一代前端构建技术;AI 应用下支离破碎的真实;不懂产品不会开发;虚拟货币是新时代的黄金
    从中断机制看 React Fiber 技术
    三分钟了解数字人民币
    凹凸技术揭秘:如何服务 toG 项目——数字人民币项目前端总结
    使用 Phaser3+Matter.js 实现“合成大西瓜”游戏
    痞子衡嵌入式:快速定位i.MXRT600板级设计ISP[2:0]启动模式引脚上电时序问题的方法
  • 原文地址:https://www.cnblogs.com/YanfeiHao/p/4432995.html
Copyright © 2011-2022 走看看