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. ArcGIS API for JavaScript 4.x 本地部署之IIS法

    [导读] 关于如何在默认网站(Default Web Site,物理地址C:\inetpub\wwwroot\)启动,已有很多博客详尽地写好了. 本篇在自建网站(本机)中配置http而非https的j ...

  2. Spring之AOP详解

    文章大纲 一.AOP介绍二.Spring的AOP实战三.AOP常用标签四.项目源码及参考资料下载五.参考文章   一.AOP介绍 1. 什么是AOP 在软件业,AOP为Aspect Oriented ...

  3. git入门手册:git的基本安装,本地库管理,远程上传

    前言: git是分布式的版本库控制系统,它能方便你将自己的代码寄存于远程服务器上,从而实现集体合作开发.git有GUI 图形界面,然而使用终端命令仍是主流.以下基于Ubuntu系统操作git(其方式也 ...

  4. Windows Server 2016-图形化之客户端加域(一)

    要使用域环境,您必须将计算机加入域.只有加入域的计算机才能使用域资源.在连接期间,将在域中创建一个计算机帐户,以便将计算机作为成员进行身份验证.前边两节我们写到Windows Server 2016- ...

  5. 周一01.2 计算机硬件&操作系统

    一.计算机硬件组成 1)控制器:是计算机的指挥系统 2)运算器:数学运算&逻辑运算 3)存储器:存取数据 内存:相当于人的短期记忆(缺点:断电数据会丢失:优点:存取速度快) 外存:相当于一个本 ...

  6. Java提取URL某个参数的值

    Java提取Url中某个参数的值. public static String getParam(String url, String name) { String params = url.subst ...

  7. IoC和AOP的理解

    spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实 ...

  8. Mysql事务开启方式(客户端+java手动+Spring Boot)

    一:概念 作为单个逻辑单元执行一系列操作,要么完全执行,要么完全不执行.举例 我们需要向数据库插入3条数据(我们希望这三条数据要么全部插入成功,要么全部失败), 比如第一条数据插入成功,插入第二条数据 ...

  9. android学习笔记--Scanner

    private static List<String> getxxxx(Context ctx) { try { Scanner sc = new Scanner( ctx.openFil ...

  10. Django rest framework源码分析(1)----认证

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...