您的位置:首页 > 其它

总结一下为什么在mac os 10.9下编译安卓源码有这么多的错误?

2014-08-22 22:50 309 查看
为什么在mac下编译安卓源码有这么多的错误?
原因:

gcc版本出错
Mac sdk版本不对
全志版本的安卓的源码问题

目前尝试过的gcc版本有几个:

xcode5.1版本的command line tool带的gcc,这个gcc是llvm的前端,gcc5的后端,大概是这样子吧,编译会很严格,安卓官网说有些在gcc下面能容忍的编写方式在这个下面就不支持。
xcode3.2自带的command line tool,这个是gcc4.2的版本,但它是for darwin9,而不是darwin13,可能跟sdk的版本不能搭配。gcc本身提供一些header用于编译,同时也会引用到Xcode本身的sdk,至于会不会跟OS X系统本身有关暂时还不清楚。用这个版本的编译器在编译到一个叫math.h时会出现错误。
xcode5.01版本的command line tool,这个版本比5.1版的稍微旧一点,大概是2013年底的版本。因为之前已经装过好几个版本的gcc了,搞得都有点混乱,因为我没有找到一个比较完美都删除之前gcc的办法,我采取的办法是在/usr/bin/ 下面建一个gccbak目录,然后就把所有跟gcc有关的可执行文件都mv进去,我反复mv了好多次,因为有些一开始会漏掉,比如gcc,g++,gcc-4.0,gcc-4.2,gcov,gcov-xx,cpp,c++,cc,i686-darwin-gcc-xxx,然后就是在usr/libexec/目录下面的gcc目录,我把这个目录直接改名为gccbak,这个目录里面包含了编译时需要用到的一些gcc的库和头文件。用这个版本编译安卓4.2的源码还是会出错,具体就是一些语法的不兼容,比如说在一个namespace里面的变量不能用xxx::abc这样的方式,要直接用abc,还有就是不能在函数里面包含内部的函数,虽然我也不喜欢在函数里面包含函数,但是看了一下代码,如果编译器不支持的话,还真的不好修改,因为这个内部的函数要直接引用内部的指针。
然后就是用macport安装的apple-gcc42,这个版本编译持续了很久,我曾经一度觉得有希望全面通过,可惜,还是在某个地方卡住了。具体还是语法的问题。
还有就是gcc-40,好像也是macport安装的,macport安装的gcc有一个独立的目录叫/opt/要在.bash_profile里面定义PATH环境变量,重点是要保证在/usr/bin/的前面,这样系统才会引用这个新的路径里面的gcc,否则系统还是会去/usr/bin里面执行旧的gcc。同样的,我后来装的command line tool开始也找不到安装的地方,后来才无意中发现原来在/Developer/CommandLineTool/usr/bin/下面,结果我还是要修改PATH参数,让系统去这里面找。用4.0的gcc编译,记得也不是特别顺利,我很快就放弃了,因为觉得不可能会成功,记得是编译出来几个页面的错误,都懒得看。还有一次是因为系统找不到as的路径,as是汇编器。应该也是属于路径问题吧。

还有就是我用来编译的安卓版本,我开始有3个版本,4.01,4.2,4.4
几乎我每安装一个xcode版本或者gcc版本都会尝试编译这几个版本的软件,曾经我装好xcode3.2之后编译4.0.1感觉走了很远,但最终还是没有通过,原因是引用但一些头文件不对。
然后我用apple-gcc42编译4.2的软件也走了很远,但最终还是没有成功,总有那么一些地方不对。
现在我在尝试是用xocode,5.01的gcc编译4.4的软件,也走了相当远,最后在编译一些aidl文件的时候出现bus error:10,我记得之前编译的版本没有试过通过这么多的。我希望它如果能够走到编译java的阶段我想就比较有把握了,因为java是没有太多兼容性问题的,而且官方也是指定用java1.6来编译的。但是之前一次我没有预先make clean,可能是因为之前编译版本不同导致的问题,现在我重新清空再来一次看看,不知道前面是什么结果等着我呢?
迫于无奈,我也尝试装虚拟机来跑ubuntu,在虚拟机上编译是不存在问题的,为了发挥最大的效能,我给虚拟机分配了差不多4G内存和4个CPU,也就是一半的内存和所有cpu,不过实际速度并不快,我想主要原因一个是指令的转换,另一个是文件系统的转换,这2方面的开销导致编译速度可能只有原机的一半速度左右。当然现在真机编译还没有通过,不能下最终结论,不过是根据终端的滚屏速度感觉而已。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: