Linux软件源码编译安装

一,源代码与可执行程序

由源代码到可执行程序,主要经历了一下过程(《深入理解计算机系统》):

* 预处理:修改原始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
    * 与静态库不同,不包含函数库的内容,只包含指向的位置的一个指针;
    * 不能独立执行,依赖于指针指向的函数库;
    * 升级比较简单,根本不需要重新编译可执行文件;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值