如何在使用distcc时检查哪个组件由哪个服务器编译

时间:2017-01-17 10:04:53

标签: makefile distcc

我在两台服务器上运行了一个distccd守护进程。 一个(称为A,。12)作为主人,而另一个(称为B,.11)作为奴隶:

Settings on A:
vim ~/.distcc/hosts
    # contents of ~/.distcc/hosts
    localhost
    192.168.1.11,cpp,lzo

Settings on B:
distccd --daemon --allow 192.168.1.12 --log-file /home/nhlee/distcc.log
"ps aux | grep distcc" to check that it's running

然后我用:

构建一些东西
pump make -j xxx

它告诉我:

__________Using distcc-pump from /usr/bin
__________Using 2 distcc servers, of which only 1 support(s) pump mode
...
__________Shutting down distcc-pump include server

然而,花费的时间几乎相同。我不确定是否有办法检查哪个组件是由哪个主机编译的。

我打开显示器:

 distccmon-text 1

我在两台机器上试过这个,两个都只显示空行。

我查看/var/look/messages,但没有任何与distcc有关。

我检查了日志文件,该文件也是空的。

如何查看我的文件是如何存在的 编译?

所以我在两台机器上都检查了top,结果发现所有文件都是在master的本地(A)上编译的。不过,我不确定为什么没有任何错误。

我也尝试从〜/ .distcc / hosts中删除'localhost',但结果仍然相同。

1 个答案:

答案 0 :(得分:1)

好的,所以我尝试了一些事情并解决了问题。我遇到了一些我也想分享的新问题。

  1. 首先,我做了

    export CC=/usr/bin/distcc
    export CXX=/usr/bin/distcc
    

    让CMake知道我想使用distcc而不是gcc / g ++。

      
        

    这是主要问题。在我这样做之后,事情就出现在监视器中了。

      
  2. 我的机器上安装了两个版本的gcc / g ++,/usr/bin/下的旧版本不支持C ++ 11,还有一个较新的版本。 虽然我的LD_LIBRARY_PATH在前面有新的路径,但不知何故distcc并没有先找到旧的路径。因此我遇到了一些编译错误,说-std = c ++ 11没有被识别。

    ## The following solved this issue:
    sudo yum remove /usr/bin/g++
    sudo yum remove /usr/bin/gcc
    
  3. 使用distcc时出现链接错误,但直接使用g ++时却没有:

    # Add a simple one-line script (mine was called /usr/bin/distg++)
    distcc g++ "$@"
    

    然后添加" -DCMAKE_CXX_COMPILER = distg ++"你的CMake命令:

    cmake ... -DCMAKE_CXX_COMPILER=distg++