易截截图软件、单文件、免安装、纯绿色、仅160KB

linux下的静态库和动态库解析


  Liux 下静态库和动态库的浅析 收藏
本文主要解决以下几个问题 
1 为什么要使用库? 
2 库的分类 
3 创建自己的库 
或许大家对自己初学linux时的情形仍记忆尤新吧。如果没有一个能较好的解决依赖关系的包管理器,在linux下安装软件将是一件及其痛苦的工作。你装 a包时,可能会提示你要先装b包,当你费尽心力找到b包时,可能又会提示你要先安装c包。我就曾被这样的事搞的焦头烂额,至今一提起rpm仍心有余悸,头 皮发麻。说是一朝被蛇咬,十年怕井绳怕也不为过。 
linux下之所以有这许多的依赖关系,其中一个开发原则真是功不可没。这个原则就是:尽量不重复做别人已经做过的事。换句话说就是尽量充分利用别人的劳动成果。 
这就涉及到如何有效的进行代码复用。 
1 为什么要使用库? 
关于代码复用的途径,一般有两种。 
粘贴复制 
这是最没有技术含量的一种方案。如果代码小,则工作量还可以忍受,如果代码很庞大,则此法不可取。即便有人原意这样做,但谁又能保证所有的代码都可得到呢? 
而库的出现很好的解决了这个问题。 
库,是一种封装机制,简单说把所有的源代码编译成目标代码后打成的包。 
那么用户怎么能知道这个库提供什么样的接口呢?难道要用nm等工具逐个扫描? 
不用担心,库的开发者早以把一切都做好了。除了包含目标代码的库外,一般还会提供一系列的头文件,头文件中就包含了库的接口。为了让方便用户,再加上一个使用说明就差不多完美了。 
2 库的分类 
2.1 库的分类 
根据链接时期的不同,库又有静态库和动态库之分。 
静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行。 
有别于静态库,动态库的链接是在程序执行的时候被链接的。所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用。(TODO:链接动态库时链接阶段到底做了什么) 
2.2 静态库和动态库的比较 
链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象是目标代码而不是源码而已。因为静态库被链接后库就直接嵌入可执行文件中了,这样就带来了两个问题。 
首先就是系统空间被浪费了。这是显而易见的,想象一下,如果多个程序链接了同一个库,则每一个生成的可执行文件就都会有一个库的副本,


相关文档:

实战Linux Bluetooth编程(六) L2CAP编程实例

例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
 如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......

linux 2.6源代码情景分析笔记之系统启动

最开始时,ram芯片中包含的是随机数据。当开始启动时,cpu的一个引脚上会产生一个reset逻辑值。此后处理器的一些寄存器设置成固定的数值,并执行在物理地址0xfffffff0处找到的代码。硬件把这个地址映射到某个只读、持久的存储芯片中,该芯片通常称为rom(read-only memory只读内存)。rom所存放的程序集在80x86体系中通常叫做 ......

linux开机启动脚本的顺序


如果服务器重启之后需要手工开启许多服务、工作及以后的维护相对比较繁琐、特地总结了下linux下开机自动启动脚本所涉及的知识和方法、如下:
1、相关基础知识点
   1)redhat的启动方式和执行次序是:
      加载内核
      执行init程序
 &nb ......

修改Linux默认启动级别或模式

以管理员身份进入Linux,修改文件:/etc/inittab
    找到“id:5:initdefault:”,其中的5就是X-Window,为默认运行级别,一般我们把5改为3即可。
    一共有7种启动级别,分别为:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号