ubuntu12.10 64bit版,编译android4.0和android4.0.4(本人试过的版本)版本会出现各种各样的问题:
例如:
frameworks/base/include/utils/KeyedVector.h:193:31: error: ‘indexOfKey’ was not declared in this scope, and
no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
'SetState' was not declared in this scope, and no declarations were found
by argument-dependent lookup at the point of instantiation [-fpermissive]
等等问题;总之是一些莫名其妙的问题。
看到后面的[-fpermissive] 搜到一篇文章提到在Android.mk中改编译选项的做法,试了几个,个别问题解决了,但是类似问题好多个,依然编译出错,最后决定试试换gcc和g++编译器版本的方法。
ubuntu12.10 64bit默认gcc版本是4.7.2
可以用 ls -l /usr/bin/gcc* 查看
例如:
hanson@hanson:~$ ls /usr/bin/gcc* -l
lrwxrwxrwx 1 root root 7 4月 10 23:56 /usr/bin/gcc -> gcc-4.7
-rwxr-xr-x 1 root root 578808 9月 22 2012 /usr/bin/gcc-4.7
-rwxr-xr-x 1 root root 22832 9月 22 2012 /usr/bin/gcc-ar-4.7
-rwxr-xr-x 1 root root 22832 9月 22 2012 /usr/bin/gcc-nm-4.7
-rwxr-xr-x 1 root root 22832 9月 22 2012 /usr/bin/gcc-ranlib-4.7
然后开始换版本:
执行:
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
cd 到 /usr/bin目录查看是否安装好gcc和g++4.4:
hanson@hanson:/usr/bin$ ls gcc* -l
lrwxrwxrwx 1 root root 7 4月 10 23:56 gcc -> gcc-4.7
-rwxr-xr-x 1 root root 255168 8月 21 2012 gcc-4.4 这个表示4.4已经安装上了
-rwxr-xr-x 1 root root 578808 9月 22 2012 gcc-4.7
-rwxr-xr-x 1 root root 22832 9月 22 2012 gcc-ar-4.7
-rwxr-xr-x 1 root root 22832 9月 22 2012 gcc-nm-4.7
-rwxr-xr-x 1 root root 22832 9月 22 2012 gcc-ranlib-4.7
然后把gcc备份一下,然后建立新的软链接指向gcc-4.4
hanson@hanson:/usr/bin$ sudo mv gcc gcc_old
hanson@hanson:/usr/bin$ sudo ln -s gcc-4.4 gcc
hanson@hanson:/usr/bin$ ls gcc* -l
lrwxrwxrwx 1 root root 7 4月 24 11:33 gcc -> gcc-4.4 ------查看软链接是否链接到gcc-4.4
-rwxr-xr-x 1 root root 255168 8月 21 2012 gcc-4.4
-rwxr-xr-x 1 root root 578808 9月 22 2012 gcc-4.7
-rwxr-xr-x 1 root root 22832 9月 22 2012 gcc-ar-4.7
-rwxr-xr-x 1 root root 22832 9月 22 2012 gcc-nm-4.7
lrwxrwxrwx 1 root root 7 4月 10 23:56 gcc_old -> gcc-4.7
-rwxr-xr-x 1 root root 22832 9月 22 2012 gcc-ranlib-4.7
g++同理:
hanson@hanson:/usr/bin$ sudo mv g++ g++_old
hanson@hanson:/usr/bin$ sudo ln -s g++-4.4 g++ ------查看软链接是否链接到g++-4.4
hanson@hanson:/usr/bin$ ls -l g++*
lrwxrwxrwx 1 root root 7 4月 24 11:34 g++ -> g++-4.4
-rwxr-xr-x 1 root root 259264 8月 21 2012 g++-4.4
-rwxr-xr-x 1 root root 582904 9月 22 2012 g++-4.7
lrwxrwxrwx 1 root root 7 9月 22 2012 g++_old -> g++-4.7
然后用 gcc -v和g++ -v看看软链接替换是否成功;
接下来还需要一个重要的操作:
hanson@hanson:/usr/bin$ sudo apt-get install g++-4.4-multilib
此安装是为了解决g++ selected multilib '32' not installed的错误,如果不安装会编译不通过。