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. Iconfont 在HTML中的使用

    一.准备阶段: a.进入阿里巴巴矢量图标库www.iconfont.cn挑选所需的图标,加入购物车 b.点击网页中的购物车下载代码 二.3种方法实现 Iconfont 的HTML显示 Unicode ...

  2. 4.熟悉App Inventor 2编程界面

    以下图片来自 https://www.17coding.net/的 俄罗斯方块开发笔记 的 第二章 开发与测试环境 .感谢金老师的分享. 建议大家打开上面第二章的链接,认真阅读.

  3. Postgresql数据库部署之:Postgresql本机启动和Postgresql注册成windows 服务

    1.初始化并创建数据库(一次即可)  initdb \data --locale=chs -U postgres -W  You can now start the database server u ...

  4. Windows Server 2016-图形化新建域用户(一)

    上章节我们介绍了有关OU组织单位的日常管理,本章我们将对域用户的创建进行简单介绍,常规的操作方法是通过管理控制台图形化手工创建,具体操作方法如下: 1.常规管理控制台 Active Directory ...

  5. 操作系统:diskpart常用指令(使用diskpart实现分区管理)

    配合磁盘管理一起食用,效果最佳.(我的电脑右键 -> 管理 -> 磁盘管理) status:列出主要命令 list:列出list下的命令 select disk 0:选择第一块磁盘 lis ...

  6. 关于Django报错django.core.exceptions.ImproperlyConfigured: Requested setting DEBUG, but settings are not configure

    报错代码:django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but se ...

  7. [LeetCode] 25. k个一组翻转链表

    题目链接: https://leetcode-cn.com/problems/reverse-nodes-in-k-group/ 题目描述: 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链 ...

  8. 总结Java常用到的六个加密技术和代码

    加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...

  9. select * 和 select 所有字段的区别

    阅读本文大概需要 1 分钟. 之前发过的文章中,关于 select * 和 select 所有字段的知识,有描述不恰当,这次重新纠正下,加深下理解. MySQL 5.1.37 表记录数 41,547, ...

  10. mysql优化二之锁机制

    mysql优化二之锁机制 mysql提供了锁机制和MVCC机制来保证并发操作的安全性,这里主要讨论锁机制, MVCC见下篇文章 mysql的锁按照锁粒度可分为行锁与表锁,按照操作类型划分可读锁和写锁 ...