在项目的开发过程中,经常出现多个开发人员集中在某个 linux 内网开发机上统一开发的情况,随着开发人员越来越多、项目编译得越来越频繁,开发机的压力越来越大,所以考虑用代码交叉编译的方式来缓解开发机的压力。

distcc 的概述:在需要使用 distcc 的服务器上,安装 distcc 软件。

(1)要把某台机子当成配合编译的机器,需要在这台机子上启动 distcc 服务;

(2)当在一台机子上需要其他机子交叉编译,则这台机子需要配置其他机子的信息,将其他机子的 ip 加到这个环境变量里面 DISTCC_POTENTIAL_HOSTS。

distcc 的安装:

1、首先根据官网安装 https://distcc.github.io/

./autogen.sh              # If "configure" does not already exist.
      ./configure
      make
      make check                # Optional! Should have python >= 3.1 installed.
      make install              # You may need to use "sudo" for this command.
      make installcheck         # Optional! Should have python >= 3.1 installed.
      update-distcc-symlinks    # Needs "sudo". Run this again if you install/remove compilers

2、./configure 的时候报错:configure: error: Cannot find libiberty。这是因为缺少 libbinutils 库,则安装 binutils-devel。

3、make 的时候发现 make 不成功,make 暂停在:

if test -z ":"; then    \
  echo "Not building include-server: No suitable python found"; \
else                                            \
  mkdir -p "./_include_server" &&      \
  DISTCC_VERSION="3.3.2"                        \
  SRCDIR="."                            \
  CFLAGS="-g -O2 -MD -W -Wall -Wimplicit -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wmissing-declarations -Wuninitialized -pthread -Wp,-U_FORTIFY_SOURCE -Wno-missing-prototypes -Wno-missing-declarations -Wno-write-strings"           \
  CPPFLAGS="-DMINILZO_HAVE_CONFIG_H -DHAVE_CONFIG_H -D_GNU_SOURCE -DLIBDIR="\"/usr/local/lib\"" -DSYSCONFDIR="\"/usr/local/etc\"" -DPKGDATADIR="\"/usr/local/share/distcc\"" -Isrc -I"./src" -I"./lzo" -I"./popt""                        \
  : "./include_server/setup.py" \
      build                                     \
        --build-base="./_include_server"  \
        --build-temp="./_include_server"; \
fi

根据官网 https://raw.githubusercontent.com/distcc/distcc/master/INSTALL 说明,python 版本需要大于 3.1。

4、在服务器上安装 python3.4,只要 /user/bin/ 目录下有 python3.4 就可以了,python 默认安装在 /usr/local 下,可以 ./configure --prefix=/usr。python 安装成功以后,要重新运行下 distcc 的 ./configure ,再 make。

5、ln -s /usr/lib/distcc/ /usr/local/lib/distcc

distcc 的配置

1、用于交叉编译的机器,需要运行 distcc 的服务,一般用以下命令:

distccd --user nobody --daemon --allow 127.0.0.1 --allow 192.168.2.0/24

2、需要使用交叉编译的服务一般在编译脚本里加上以下命令:

  export DISTCC_HOSTS="localhost 192.168.2.236 192.168.2.238"

  export DISTCC_POTENTIAL_HOSTS="localhost 192.168.2.236 192.168.2.238"

  export DISTCC_LOG="./distcc.log" #编译日志

3、如果是使用 cmake,可以使用以下命令:

  cmake -DCMAKE_C_COMPILER=/usr/lib/distcc/cc -DCMAKE_CXX_COMPILER=/usr/lib/distcc/g++ ../

需要确认哪些文件是在哪些服务器上编译的,可以使用命令 distccmon-text 1,1表示1秒更新一次。

distcc 的使用的更多相关文章

  1. dmucs与distcc

    之前配置distcc没有考虑负载均衡这一项,现在考虑使用dmucs实现distcc的负载均衡 官方手册 http://dmucs.sourceforge.net/ 使用官方手册编译会报错,等解决问题后 ...

  2. distcc (dcc_execvp) ERROR: failed to exec XX: Permission denied

    首先先确保一下是不是能执行下面语句: # sudo -u nobody XX --version 如果能看见版本信息,则可以不用往下看. 再检查一下distccd.service # sudo cat ...

  3. (转)Android分布式编译学习(一)distcc实现分布式编译 —— Ubuntu12.04上部署distcc分布式编译

    转自:http://blog.csdn.net/eqiang8271/article/details/17144411   版权声明:本文为博主原创文章,未经博主允许不得转载. Android代码庞大 ...

  4. distcc配置

    原理图: OS: ubuntu Server 12.04 1.安装 apt-get install distcc 2.配置 将文件/etc/default/distcc修改为如下格式 STARTDIS ...

  5. cmake工程使用distcc

    distcc可以加速编译,但是遇到cmake可能就需要处理下. 问题 distcc在 /usr/lib/distcc 中放了各编译器的soft link(如cc/gcc等等),如果 /usr/lib/ ...

  6. distcc加速内核编译

    Linux内核编译实在是费时间的事,搞内核移植的时候总要编译,生命有一部分就浪费在等内核编译完成上,有心想买个HP的工作站,看了下Z840的价格,想想还是算了.distcc早就听说过,一直没有去试试, ...

  7. metasploit--exploit模块信息

    Name                                             Disclosure Date  Rank    Description ----           ...

  8. Jenkins+Gitlab搭建持续集成(CI)环境

    利用Jenkins+Gitlab搭建持续集成(CI)环境 Permalink: 2013-09-08 22:04:00 by hyhx2008in intern tags: jenkins gitla ...

  9. ccache高速编译工具

    ccache的主页:http://ccache.samba.org distcc的主页:http://distcc.samba.org 1.背景: 在处理一些规模相对较大的工程时,编译花费的时间可能会 ...

随机推荐

  1. JavaScript算法实现之汉诺塔(Hanoi)

    目前前端新手,看到的不喜勿喷,还望大神指教. 随着Node.js,Angular.js,JQuery的流行,点燃了我学习JavaScript的热情!以后打算每天早上跟晚上抽2小时左右时间将经典的算法都 ...

  2. 数据表与简单java类映射转换

    简单的Java类的定义来源于数据表的结构, 例如:雇员信息表.部门信息表描述的就是雇员或部门的信息, 在实际的开发之中,数据表和简单java类之间的映射关系如下: 1. 数据实体表设计 = 类的定义: ...

  3. C# VS2019 WebService创建与发布,并部署到Windows Server 2012R

    前言 上一次数据库灾备和性能优化后,数据库专家建议,在不扩容的情况下,客户端不能再频繁的扫描数据库了!一句惊醒梦中人,因为我也发现数据库越来越卡了,自从上个项目上线后,就出现了这个情况.后来分析其原因 ...

  4. day20191010ClassNotes

    笔记: 1.DAO模式组成部分: 程序 ----> 数据库 实体类 数据库中的表 工具类:公共的数据库连接.关闭.公共的增删改.查询 接口 : 程序提倡的是面向接口编程,从而降低程序的耦合性 实 ...

  5. 最小生成树(Kruskal)

    题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M<= ...

  6. Chapter 01—Introduction to R

    1.getwd():list the current working directory. (即获得当前工作路径) 2.setwd("mydirectory"):change th ...

  7. C语音I博客作业09

    ------------恢复内容开始------------ 这个作业属于那个课程|C语言程序设计II --|:--:|--: 这个作业要求在哪里|https://edu.cnblogs.com/ca ...

  8. NSAttributedString可以强制转换为NSMutableAttributedString类型吗?下面这代码有什么问题 为什么报错

    -(void)insetEmotion:(EmotionModel*)emotionModel{ if(emotionModel.code){ /** 在TextView中插入图片首选要知道光标的位置 ...

  9. php踩过的那些坑(2) strpos引发的血案

    一.前方有坑 php某些自带函数,如果使用不当,也会坑得你人仰马翻.比如:strpos() 先了解一下strpos()函数是干啥的. strpos — 查找字符串首次出现的位置 用法: int str ...

  10. 小熊派IoT开发板系列教程正式发布——免费学习

    [摘要] 小熊派开源社区针对小熊派IoT开发板首次规划了小熊派未来的系列教程.从基础到进阶的设计,可适应具有不同基础的开发者,通过该系列教程的学习,开发者能够轻松掌握IoT产品的开发.该系列教程包括单 ...