OS X上搭建distcc使用XCode进行分布式编译

一、distcc介绍

distcc是google的一个开源工具,它不是一个编译器,而是一个负责调度不同设备上的编译器,从而实现分布式编译的工具。

官网 https://code.google.com/p/distcc/

 

传统的编译过程可以划分为以下部分:

1)     预处理 - preprocess

2)     编译  - compile

3)     链接  - link

 

在distcc的流程中,“编译- compile”部分会在其他机器进行,而剩余部分仍然在本机进行。


二、distcc for XCode搭建

由于为XCode新建一个编译器选项以及修改工程更换编译器十分繁琐,所以我决定采用修改XCode默认编译配置的方式来让XCode使用上distcc。

为此,我写了一些脚本用于进行快速配置。

Git地址如下

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. git clone https://github.com/zqxiaojin/distccForXCode.git  

 

脚本说明:

1)        checkout_patch.sh。获取disticc源代码并且打补丁。补丁是为了让其适配XCode编译器Clang

2)        makeInstall.sh。编译distcc并且将其ln 到XCode编译器目录

3)        fakeLLVM.sh。将XCode默认的编译器更换为distcc

4)        restoreLLVM.sh。将XCode默认的编译器恢复为clang

5)        runServer.sh。运行distcc服务器,脚步中默认允许部分IP进行访问,请根据自己实际情况进行配置。

  

distcc可以既让机器作为client同时作为server进行使用。但我目前使用的场景只是让部分机器仅仅作为server使用。

 

三、配置和测试

1)     server配置允许的访问的IP段。修改请参考runServer.sh脚本和编译出来的distccd --help。

2)     client配置host列表。可在~/.distcc/hosts或/usr/local/etc/distcc/hosts添加sever的服务器地址。参见distcc –help。

3)     检测编译统计。在server启动后,可以访问其3633端口获取统计信息,如本机运行作为server后访问http://127.0.0.1:3633/ 可查看到当前统计情况。


4)     实时检察本机分布式编译情况。使用以下命令可定时检查当前情况:

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ./distccmon-text 5  

5)     修改XCodeBuild 的并行任务数。通过添加参数–jobs 8 即可修改。

6)     修改XCode IDE的编译任务数。在命令行执行以下内容:

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. defaults write com.apple.dt XCodeIDEBuildOperationMaxNumberOfConcurrentCompileTasks 8  

7)     检查是否已经使用distcc。在执行了fakeLLVM后,可以通过XCode编译时的脚本观察到当前是否已经使用distcc,如下图:

 


  



最后要补充一点:为了确保编译结果正确率较高,server和client应该使用相同版本的编译器。


出现这个错误的原因是在导入seaborn包时,无法从typing模块中导入名为'Protocol'的对象。 解决这个问题的方法有以下几种: 1. 检查你的Python版本是否符合seaborn包的要求,如果不符合,尝试更新Python版本。 2. 检查你的环境中是否安装了typing_extensions包,如果没有安装,可以使用以下命令安装:pip install typing_extensions。 3. 如果你使用的是Python 3.8版本以下的版本,你可以尝试使用typing_extensions包来代替typing模块来解决该问题。 4. 检查你的代码是否正确导入了seaborn包,并且没有其他导入错误。 5. 如果以上方法都无法解决问题,可以尝试在你的代码中使用其他的可替代包或者更新seaborn包的版本来解决该问题。 总结: 出现ImportError: cannot import name 'Protocol' from 'typing'错误的原因可能是由于Python版本不兼容、缺少typing_extensions包或者导入错误等原因造成的。可以根据具体情况尝试上述方法来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:\Anaconda\envs\tensorflow\lib\typing....](https://blog.youkuaiyun.com/yuhaix/article/details/124528628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值