作者:朱金灿

来源:http://blog.csdn.net/clever101

继续研究distcc。今天我在思考这样一个问题:分布式编译系统本身并不是编译器,它本质是一个编译请求的发起者和执行者,也就是说,它必须创建编译进程,而要创建编译进程,它需要找到编译器,具体到distcc,就是gcc编译器。就是分布式编译的客户端或者转入一个编译器参数,或者它自己去找编译器。

今天通过阅读代码,证实了我的猜测。Distcc客户端程序是一个控制台程序,它带有一些命令行参数,如—help用于显示帮助信息,--version用于显示版本信息等等。今天我们抛开这些细节,遵循这样研究思路:看看distcc如何gcc编译器,又是如何创建编译进程的。

很快,我们找到这样一个函数:dcc_find_compiler。看样子这个函数是用来实现寻找编译器的。让我们看看事实是不是这样的。

intdcc_find_compiler(char **argv, char ***out_argv){int ret;if (argv[1][0] == '-'|| dcc_is_source(argv[1])|| dcc_is_object(argv[1])) {if ((ret = dcc_copy_argv(argv,out_argv, 0)) != 0) {return ret;}/* change "distcc cc -cfoo.c" -> "cc -c foo.c" */free((*out_argv)[0]);(*out_argv)[0] =strdup("cc");if ((*out_argv)[0] == NULL) {return EXIT_OUT_OF_MEMORY;}return 0;} else {/* skip "distcc", point to"gcc -c foo.c"  */return dcc_copy_argv(argv + 1,out_argv, 0);}}

我们看到这个函数确实是查找编译器的。我们也看到了distcc实际上支持两种编译器的,一种是cc(貌似是SUN推出的C++编译器),另一种是gcc。找到的编译器及其编译文件参数保存在out_argv变量中。

既然我们找到编译器,那么下一步应该是创建编译进程。在main函数中在调用完dcc_find_compiler函数接着调用dcc_trim_path函数,貌似是检查系统有安装gcc或cc,反正不是创建编译进程的,暂且忽略。继续往下看。

跳过一些次要的函数,我终于找到一个重要的函数:dcc_build_somewhere_timed。在以后的岁月里我们将重点剖析该函数。这篇就到这里吧。

转载于:https://www.cnblogs.com/lanzhi/archive/2012/02/03/6470894.html

distcc源码研究三相关推荐

  1. Nginx源码研究三:Epoll在NGINX中的使用

    Web服务器在面对高并发的情况下,网络的IO一般选择IO复用,像apache选择的Select/poll.Nginx在linux 2.6后选择Epoll做网路IO,提高了WEB服务的并发能力. 在本章 ...

  2. 一起谈.NET技术,.NET Framework源码研究系列之---万法归宗Object

    经过前面三篇关于.NET Framework源码研究系列的随笔,相信大家都发现其实.NET Framework的实现其实并不复杂,也许跟我们自己做的项目开发差不多.本人也是这样的看法.不过,经过仔细深 ...

  3. Nginx源码研究之nginx限流模块详解

    这篇文章主要介绍了Nginx源码研究之nginx限流模块详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 高并发系统有三把利器:缓存.降级和限流: 限流的目的是通过对并 ...

  4. WebRTC源码研究(4)web服务器工作原理和常用协议基础

    文章目录 WebRTC源码研究(4)web服务器工作原理和常用协议基础 前言 做WebRTC 开发为啥要懂服务器开发知识 1. Web 服务器简介 2. Web 服务器的类型 3. Web 服务器的工 ...

  5. WebRTC源码研究(7)创建简单的HTTPS服务

    文章目录 WebRTC源码研究(7)创建简单的HTTPS服务 1. HTTPS简介 2. HTTPS 协议 3. HTTPS 证书 4. 创建简单的HTTPS服务 4.1 生成HTTPS证书 4.2 ...

  6. WebRTC源码研究(4)web服务器工作原理和常用协议基础(转载)

    前言 前面3篇博客分别对WebRTC框架的介绍,WebRTC源码目录,WebRTC的运行机制进行了介绍,接下来讲解一点关于服务器原理的知识.后面博客会写关于WebRTC服务器相关的开发,目前git上面 ...

  7. WebRTC源码研究(1)WebRTC架构

    文章目录 WebRTC源码研究(1)WebRTC架构 1. WebRTC简介 2. WebRTC的能力 2.1 抓住属于WebRTC的5G时代风口 2.1.1 浏览器的支持情况 2.1.2 大厂的加入 ...

  8. 二、Neo4j源码研究系列 - 单步调试

    二.Neo4j源码研究系列 - 单步调试 一.背景介绍 上一篇我们已经把了neo4j的源码准备以及打包流程完成了,本篇将讲解如何对neo4j进行单步调试.对于不了解如何编译打包neo4j的读者,请阅读 ...

  9. .NET Framework源码研究系列之---万法归宗Object

    原文地址:http://www.cnblogs.com/niyw/archive/2010/07/28/1787358.html 经过前面三篇关于.NET Framework源码研究系列的随笔,相信大 ...

最新文章

  1. 说说我们为什么需要加班
  2. Silverlight实例教程 - Navigation导航框架系列汇总
  3. 数据结构与算法笔记(七)—— 选择排序
  4. 蓝桥杯java 算法训练 区间K大数查询
  5. 今天英雄联盟服务器维护要到好久,lol今天维护时间是多久 lol维护公告2020最新...
  6. 循环练习题:小球下落
  7. Mysql学习总结(43)——MySQL主从复制详细配置
  8. 中国移动锁定数据业务新战略
  9. flash 与随机性:随机抽取(2)
  10. Maxwell 一款简单易上手的实时抓取Mysql数据的软件
  11. 毕设周记——需求分析
  12. html开源flash视频播放器代码下载
  13. 2018前端走向全栈,Nodejs快速入门视频教程
  14. MacBook Pro维修过程
  15. 苏州企业注册商标需要提前做好哪些工作?
  16. 苹果app store水军_苹果终止App Store开发者反叛的解决方案
  17. MQTT协议的智能家居之指纹锁
  18. 【单片机基础】89C52单片机串口通信
  19. 微积分 重点难点记录
  20. 第四章 字体和格式相关

热门文章

  1. python 宏定义_python Debug宏定义
  2. 使用Python批量处理行、列和单元格
  3. 如何实现运行时刻的多态?(c++)
  4. Oracle 排序中使用nulls first 或者nulls last 语法
  5. 笔记-中项案例题-2018年下-整体管理
  6. UltraVNC反向连接方式的使用
  7. Redis中使用Java代码的方式实现发布订阅流程
  8. Android中DatePicker日期选择器的使用和获取选择的年月日
  9. Winform中实现将照片剪贴到系统剪切板中(附代码下载)
  10. C#中使用WebClient下载指定url的网络照片