标签 Compile 下的文章

一个Solaris x86平台64位编译的问题

上午在做一个Solaris 10 on x86代码移植测试过程中,发现一个Gcc编译问题,这里记录下来以作备忘。
 
我们的代码在一台安装了Solaris 10 for x86平台的机器A上进行64位编译(gcc -m64)时报错,错误信息如下:
"xx.c:1: sorry, unimplemented: 64-bit mode not compiled in"。
 
而奇怪的是在另外一台同为Solaris 10 for x86的机器B(与上面的机器A硬件配置相同)上则顺利编译通过。最初猜测可能是因为系统设置或环境变量设置不同导致的问题,经过对比检查后发现以上设置都一致,最后将问题定位在Gcc编译器版本上了。
 
机器A上使用的是Gcc 3.4.6 for Solaris 10 on x86版本;而可以通过编译的那台机器B上使用的是Gcc 3.4.3 (csl-sol210-3_4-branch+sol_rpath) for Solaris 10 x86版本。尝试在机器A上使用Gcc 3.4.3进行编译,错误未再出现,看来的确是Gcc编译器版本问题。
 
遂到Sunfreeware网站上一查究竟。在Gcc 3.4.6 for Solaris 10 on x86的软件说明中,有这样一段话:
 
“If you need to do 64-bit compiles, you should use the gcc-3.4.3 that comes with Solaris 10 in /usr/sfw/bin.”
 
而Gcc 3.4.6 for Solaris 10 on sparc的版本说明中,则明确表示:“When needed and the source code supports it, this C compiler can create 64-bit executables via the -m64 flag as well as the usual 32-bit ones.”
 
注:以上提到的Solaris软件均来自于Sunfreeware站点。

分布式编译让你的工作更高效

随着工程代码量的增加,往往完整的编译一次Proj消耗的时间可能足够你喝两杯咖啡了,我现在build一次我所在proj的代码需要5分多钟,这是很痛苦的,颇让人懊恼的。为了解决这个工作中的别扭事儿,我在网上搜寻了一番,找到了distcc这个分布式编译工具。

先看看distcc能帮助我节省多少时间吧。我在公司的一台Sun SPARC Solaris9主机下对整个项目源代码按照以前的编译方式进行了一次build,这次build用了5分多钟;同样我使用distcc编译(安装了两个节点,都是Sun SPARC Solaris9主机),居然只用了1分多钟,试想如何有更多的服务器作为distcc的守候进程主机节点的话,势必编译性能还会有提升。

有了"惊人"结果后,我们来看看distcc的原理,distcc本身是gcc的一个wrapper,也可用作本地编译,但是更多的是其分布式编译的强大功能,简单来说:就是将gcc的编译任务分布到各个其他主机上去,然后再传回来整合。它提高的是gcc -c阶段的速度,链接阶段的速度由于肯定要在本地实施,所以distcc无能为力。另外distcc推荐分布的不同主机上安装的编译器版本最好要一致,否则可能会有意想不到的错误。

distcc的安装和使用方法甚是简单,我安装的是distcc-2.13-sol9-sparc-local,直接在root下pkgadd即可。然后在各个distcc节点启动后台守候进程:distccd –daemon –allow x.x.x.x/16,以普通用户启动即可。

客户端使用方法:
1、在自己的用户下,添加环境变量(如果你用的是C shell):setenv DISTCC_HOSTS 'localhost x.x.x.x',代表本机和x.x.x.x上安装并启动了distccd
2、将你的makefile 中的CC=gcc改为CC=distcc gcc
3、make即可 。同样你还可以在make的-j参数选项,如make -j 12,这样在单机上进行多任务并行编译,使速度更快。
4、如果你想观察各节点上distcc的工作状态,可使用distccmon-text 2 命令查看distcc在各台主机上的任务快照。参数2代表:每隔2秒刷新一次。

Distcc理论上是可以部署在不同平台上辅助进行分布式编译的,但是在异构平台上分布需要一段时间设置和调试,我推荐还是尽量部署在同一类型平台上吧。有了distcc,我们的服务器的计算能力得到了充分的发挥,个人工作效率也会有所提高的,不知道长此下去喝咖啡的机会会不会被剥夺了:)

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 AI原生开发工作流实战 Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com
这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats