5.11  库的使用

  代码的复用是计算机程序设计语言中的一个重要的概念。可以把编译好的目标文件模块统一放到一个库中,使得程序员可以在不同的程序中共享这些代码。

  在Linux操作系统下,最后连接生成可执行文件时,如果链接的是一般的.o文件,则整个文件的内容都会被装入可执行文件中;如果链接的是库,则只是从库中找到程序中用到的变量和函数,将它们装入可执行文件中,那些在库中没有被程序所引用的变量和函数则不会被链接到最终的可执行文件。

  所以,库可以节省大量的开发时间。在写较大程序时,最好把程序模块放在库中。

  5.11.1  创建库和维护库

    库中所有文件都叫作库的成员,可以时用以下格式来表示库的成员:

    库名(成员名)

    如:

    mylib.a(mytest5_1.o)

    用来表示库mylib.a中的一个文件mytest5_1.o。  #.a为库常用的扩展名

    表示库成员的另一个格式:

    库名((entry))

    

    使用下面格式来说明库和成员的依赖关系:

    库名:库名(成员名) 库名(成员名) ...

    另一种格式说明依赖关系:

    库名 .LIBRARY:成员名1 成员名2 ...

    示例:维护一个名为mylib的库,makefile文件格式如下:

mylib:mylib(test5_1.o)
gcc -c test5_1.c
ar -ruv mylib test5_1.o
rm test5_1.o
mylib:mylib(test2.o)
gcc -c test2.c
ar -ruv mylib test2.o
rm test2.o

    ar 命令的作用是从.o结尾的目标文件更新库,格式如下:

    ar -ruv 库名 目标文件名

    上面两段代码很相似,可以利用动态宏合并不同的文件,代码如下:

    

    

随机推荐

  1. 通过user.MYD MySQL密码

    具体的获取方法: 1)通过hex 十六进制的工具打开user.MYD文件 这里使用:0XED 2)复制MySQL密码出来,进行分析 *CEAF6E9FA3A448A25AC9D00C8D7078385 ...

  2. 关于wordpress升级遇到的问题

    前几天登录我的博客后台,发现可以升级了,顺手点了一下,但顺接出现了几个报错,然后这里记录一下解决方法: 1.出现“另一更新正在进行”的错误解决: 这是因为可能你上次更新失败了,或者WordPress在 ...

  3. postgres的使用命令

    1.更新源 yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos1 ...

  4. leaflet 学习备忘

    leaflet 开源js地图工具.非常好用. leaflet参考:http://leafletjs.com/ 特性: 完全开源,可以基于不同的第三方瓦片生成地图. 基于原始GPS,无需转换 可创建离线 ...

  5. 【Python实践-5】使用迭代查找一个list中最小和最大值

    # -*- coding: utf-8 -*- #使用迭代查找一个list中最小和最大值,并返回一个tuple #遍历list,找到最小值 def findMinAndMax(L): if L==[] ...

  6. 【Caffe篇】--Caffe solver层从初始到应用

    一.前述 solve主要是定义求解过程,超参数的 二.具体 #往往loss function是非凸的,没有解析解,我们需要通过优化方法来求解. #caffe提供了六种优化算法来求解最优参数,在solv ...

  7. Elasticsearch的基本概念和指标

    背景 在13年的时候,我开始负责整个公司的搜索引擎.嗯……,不是很牛的那种大项目负责人.而是整个搜索就我一个人做.哈哈. 后来跳槽之后,所经历的团队都用Elasticsearch,基本上和缓存一样,是 ...

  8. Bumblebee微服务网关的部署和扩展

    Bumblebee是.netcore下开源基于BeetleX.FastHttpApi扩展的HTTP微服务网关组件,它的主要作用是针对WebAPI集群服务作一个集中的转发和管理:作为应用网关它提供了应用 ...

  9. .NET ClrProfiler ILRewrite 商业级APM原理

    Demo:https://github.com/caozhiyuan/ClrProfiler.Trace 背景 为了实现自动.无依赖地跟踪分析应用程序性能(达到商业级APM效果),作者希望能动态修改应 ...

  10. 《C#并发编程经典实例》学习笔记—2.6 任务完成时的处理

    问题 正在 await 一批任务,希望在每个任务完成时对它做一些处理.另外,希望在任务一完成就立即进行处理,而不需要等待其他任务. 问题的重点在于希望任务完成之后立即进行处理,而不去等待其他任务. 这 ...