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

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


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


相关文档:

linux 学习计划

解答:学习Linux的四个步骤
假设你是计算机科班出身,计算机系的基本课程如数据结构、操作系统、体系结构、编译原理、计算机网络你全修过
我想大概可以分为4个阶段,水平从低到高
从安装使用=>linux常用命令=>linux系统编程=>内核开发阅读内核源码
其中学习linux常用命令时就要学会自己编译内核,优化系统,调 ......

Linux如何查找动态库 转+注


Linux如何查找动态库
 
http://blog.chinaunix.net/u2/60011/showart_1007920.html
 
1.  静态库和动态库的基本概念
静态库,是在可执行程序连接时就已经加入到执行码中,在物理上成为执行程序的一部分;使用静态库编译的程序运行时无需该库文件支持,哪里都可以用,但是生成的可执行文件较大。
动 ......

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号