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的錯誤,如果不安裝會編譯不通過。