安装distcc分布式编译环境



1.下载并安装python-dev
    sudo apt-get install python-dev
2.下载并解压distcc:
    tar xvf distcc-3.2rc1.tar.bz2
3.配置
    cd distcc-3.2rc1/
    ./configure --prefix=/home/you/distcc-install --disable-Werror
4.安装
    make install
5.运行
    服务端运行
        export PATH=$PATH:服务端distcc程序路径:服务器编译工具路径
        distcc --deamon --allow 192.168.0.0/16
    客户端运行 :
        export PATH=$PATH:客户端distcc程序路径:客户端编译工具路径
        export DISTCC_HOSTS="server_ip1 server_ip2 ..."
        make -j8 CC=distcc

6.原理:
    distcc的原理是,将要编译的c或cpp文件通过网络发送到服务器,服务器中运行的distccd收到消息后调用服务器端的distcc程序进行编译,将生成的.o文件返回给客户端,其中distcc程序不是编译器,它是一个壳,最终会调用gcc或cc.

7.交叉编译:
    交叉编译和普通编译一样,只是要指定编译器,查看distcc的源代码发现里面没有指定编译器的方法,只有一个查找函数dcc_find_compiler,对此函数修改就可以指定自己的编译器,然后进行交叉编译.
    下面是我修改的源代码:
src/implicit.c
int dcc_find_compiler(char **argv, char ***out_argv)
 {
     int i=0,j,k,ret;
     int argv_len=0;
    char* compiler_env=NULL,*compiler=NULL;
    for (i=0;argv[i]!=NULL;i++);
    argv_len=i;
    i=0;
    while (argv[i] != NULL) {
        if(strncmp("-COM",argv[i],4)==0){
            if (argv[i + 1]!=NULL) {
                *out_argv=malloc((argv_len-1)*sizeof(argv[0]));
                if (*out_argv==NULL) {
                    return -1;
                }
                (*out_argv)[0] = strdup(argv[i + 1]);
                j=1;
                for (k=1;k<argv_len;k++) {
                    if (k!=i && k!=i+1) {
                        (*out_argv)[j++] = strdup(argv[k]);
                    }
                }
                (*out_argv)[j]=0;
                /*
                printf(">>");
                for (i=0;i<j;i++) {
                    printf("%s ",(*out_argv)[i]);
                }
                printf("\n");*/
                return 0;
            } else {
                return -1;
            }
        }
        i++;
    }
    return -1;
 }



使用方式很简单:
    make -j8 CC="distcc -COM gcc"


8.注意事项:
    服务器端和客户端的编译工具应该要一样,不然生成的.o文件链接不起来.
    可以使用distccmon-text来观察编译进程.
    在启动distccd服务端时,可以使用--log-file参数指定日志文件,用来查找编译错误,没有错误的情况下关掉会比较好,毕境写日志是要占用时间的.


你可能感兴趣的:(安装distcc分布式编译环境)