distcc源码研究三
作者:朱金灿
来源: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源码研究三相关推荐
- Nginx源码研究三:Epoll在NGINX中的使用
Web服务器在面对高并发的情况下,网络的IO一般选择IO复用,像apache选择的Select/poll.Nginx在linux 2.6后选择Epoll做网路IO,提高了WEB服务的并发能力. 在本章 ...
- 一起谈.NET技术,.NET Framework源码研究系列之---万法归宗Object
经过前面三篇关于.NET Framework源码研究系列的随笔,相信大家都发现其实.NET Framework的实现其实并不复杂,也许跟我们自己做的项目开发差不多.本人也是这样的看法.不过,经过仔细深 ...
- Nginx源码研究之nginx限流模块详解
这篇文章主要介绍了Nginx源码研究之nginx限流模块详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 高并发系统有三把利器:缓存.降级和限流: 限流的目的是通过对并 ...
- WebRTC源码研究(4)web服务器工作原理和常用协议基础
文章目录 WebRTC源码研究(4)web服务器工作原理和常用协议基础 前言 做WebRTC 开发为啥要懂服务器开发知识 1. Web 服务器简介 2. Web 服务器的类型 3. Web 服务器的工 ...
- WebRTC源码研究(7)创建简单的HTTPS服务
文章目录 WebRTC源码研究(7)创建简单的HTTPS服务 1. HTTPS简介 2. HTTPS 协议 3. HTTPS 证书 4. 创建简单的HTTPS服务 4.1 生成HTTPS证书 4.2 ...
- WebRTC源码研究(4)web服务器工作原理和常用协议基础(转载)
前言 前面3篇博客分别对WebRTC框架的介绍,WebRTC源码目录,WebRTC的运行机制进行了介绍,接下来讲解一点关于服务器原理的知识.后面博客会写关于WebRTC服务器相关的开发,目前git上面 ...
- WebRTC源码研究(1)WebRTC架构
文章目录 WebRTC源码研究(1)WebRTC架构 1. WebRTC简介 2. WebRTC的能力 2.1 抓住属于WebRTC的5G时代风口 2.1.1 浏览器的支持情况 2.1.2 大厂的加入 ...
- 二、Neo4j源码研究系列 - 单步调试
二.Neo4j源码研究系列 - 单步调试 一.背景介绍 上一篇我们已经把了neo4j的源码准备以及打包流程完成了,本篇将讲解如何对neo4j进行单步调试.对于不了解如何编译打包neo4j的读者,请阅读 ...
- .NET Framework源码研究系列之---万法归宗Object
原文地址:http://www.cnblogs.com/niyw/archive/2010/07/28/1787358.html 经过前面三篇关于.NET Framework源码研究系列的随笔,相信大 ...
最新文章
- 说说我们为什么需要加班
- Silverlight实例教程 - Navigation导航框架系列汇总
- 数据结构与算法笔记(七)—— 选择排序
- 蓝桥杯java 算法训练 区间K大数查询
- 今天英雄联盟服务器维护要到好久,lol今天维护时间是多久 lol维护公告2020最新...
- 循环练习题:小球下落
- Mysql学习总结(43)——MySQL主从复制详细配置
- 中国移动锁定数据业务新战略
- flash 与随机性:随机抽取(2)
- Maxwell 一款简单易上手的实时抓取Mysql数据的软件
- 毕设周记——需求分析
- html开源flash视频播放器代码下载
- 2018前端走向全栈,Nodejs快速入门视频教程
- MacBook Pro维修过程
- 苏州企业注册商标需要提前做好哪些工作?
- 苹果app store水军_苹果终止App Store开发者反叛的解决方案
- MQTT协议的智能家居之指纹锁
- 【单片机基础】89C52单片机串口通信
- 微积分 重点难点记录
- 第四章 字体和格式相关
热门文章
- python 宏定义_python Debug宏定义
- 使用Python批量处理行、列和单元格
- 如何实现运行时刻的多态?(c++)
- Oracle 排序中使用nulls first 或者nulls last 语法
- 笔记-中项案例题-2018年下-整体管理
- UltraVNC反向连接方式的使用
- Redis中使用Java代码的方式实现发布订阅流程
- Android中DatePicker日期选择器的使用和获取选择的年月日
- Winform中实现将照片剪贴到系统剪切板中(附代码下载)
- C#中使用WebClient下载指定url的网络照片