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参数指定日志文件,用来查找编译错误,没有错误的情况下关掉会比较好,毕境写日志是要占用时间的.