Linux软件源码编译安装
2015-07-08 20:44
423 查看
一,源代码与可执行程序
由源代码到可执行程序,主要经历了一下过程(《深入理解计算机系统》):* 预处理:修改原始c程序,读取文件中外引的内容,得到另一个c程序; * 编译阶段:将c程序翻译成汇编程序; * 汇编阶段:将汇编程序翻译成机器指令; * 链接阶段:将预编译好的标准文件合并到目标文件中;
注:
* linux上最标准的语言是c,gcc是不错的编译器;
* file可以看文件类型,LSB executable是可执行的标志;
* 系统调用比库函数更加底层,是unix内核直接提供的入口点,不过从用户的角度并没有什么区别;
二,make和configure
* 对于一个文件众多、关系复杂的大型软件,在编译时处理源码之间的依赖使得编译过程非常复杂。make就提供了一个根据相关依赖关系说明,依次编译所有文件的功能。也就是说,只要编写一个规则文件,表明源码文件之间的依赖,然后执行make,然后biubiubiu,就编译好了。这个文件文件叫Makefile。 * 接下来的问题是Makefile怎么写,一般软件发布商都会提供一个程序,会自动检测目标系统的安装环境并生成makefile,毕竟每个linux系统的环境是不同的嘛。通常这个文件名为configure或者config.
三,Tarball
其实这就是tar,文件打包和压缩。
四,安装的基础操作:
* 取的源文件,解压缩; * 查看INSTALL/README; * 建立makefile:以自动检测程序(configure或者config)检测操作环境,并建立Makefile这个文件; * 编译:make; * 安装:make install将文件安装到正确的路径;
五,函数库管理
函数库分为动态库和静态库: * 静态库: * * 扩展名为a; * 在编译时直接整合到执行程序中,所以利用静态库编译的文件会比较大; * 最大的有点就是可以独立执行,不需要再向外部要求读取函数库的内容; * 如果函数库升级,需要重新编译所有以静态库方式引用此函数库的执行文件,局限性比较大; * 动态库: * * 扩展名为so * 与静态库不同,不包含函数库的内容,只包含指向的位置的一个指针; * 不能独立执行,依赖于指针指向的函数库; * 升级比较简单,根本不需要重新编译可执行文件;
相关文章推荐
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Aut2Exe编译au3脚本为可执行文件
- CentOS 6.3下编译安装Ruby 2.0笔记
- 把Lua编译进nginx步骤方法
- Lua中编译执行代码相关的函数详解
- Chrome Visual Studio 2005下的编译过程
- LCL.VBS 病毒源代码
- Windows下使用Cygwin编译MySQL客户端
- android的编译和运行过程深入分析
- php查看网页源代码的方法
- c#中xml文档注释编译dll引用到其它项目示例
- Lua cjson模块编译笔记及错误解决方法
- SQLSERVER编译与重编译发生场景及重用的利弊介绍
- 浅析使用Turck-mmcache编译来加速、优化PHP代码
- 如何编译libfreetype方法详解
- 深入理解C语言中编译相关的常见错误
- 在VS2008中编译MYSQL5.1.48的方法
- Nginx编译参数大全 configure参数中文详解
- centos下编译安装mysql报错解决方案
- Lua的编译、执行和调试技术介绍