Android文件系統編譯出錯記錄


錯誤1:

注意:external/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessageLite.java 使用了未經檢查或不安全的操作。

注意:要了解詳細信息,請使用 -Xlint:unchecked 重新編譯。
注意:external/protobuf/java/src/main/java/com/google/protobuf/micro/CodedInputStreamMicro.java 使用了未經檢查或不安全的操作。
注意:要了解詳細信息,請使用 -Xlint:unchecked 重新編譯。
Generated: (out/target/product/generic/android-info.txt)
host C: acp <= build/tools/acp/acp.c
host C++: libhost <= build/libs/host/pseudolocalize.cpp
host C: libhost <= build/libs/host/CopyFile.c
<命令行>:0:0: 警告: “_FORTIFY_SOURCE”重定義 [默認啟用]
<built-in>:0:0: 附注: 這是先前定義的位置
<命令行>:0:0: 警告: “_FORTIFY_SOURCE”重定義 [默認啟用]
<built-in>:0:0: 附注: 這是先前定義的位置
In file included from build/libs/host/CopyFile.c:11:0:
build/libs/host/include/host/CopyFile.h:5:22: 致命錯誤: sys/stat.h:沒有那個文件或目錄
編譯中斷。
In file included from /usr/include/stdlib.h:25:0,
                 from build/tools/acp/acp.c:11:
/usr/include/features.h:323:26: 致命錯誤: bits/predefs.h:沒有那個文件或目錄
編譯中斷。
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/CopyFile.o] 錯誤 1
make: *** 正在等待未完成的任務....
make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] 錯誤 1
<命令行>:0:0: 警告: “_FORTIFY_SOURCE”重定義 [默認啟用]
<built-in>:0:0: 附注: 這是先前定義的位置
In file included from /usr/include/c++/4.6/x86_64-linux-gnu/32/bits/os_defines.h:40:0,
                 from /usr/include/c++/4.6/x86_64-linux-gnu/32/bits/c++config.h:392,
                 from /usr/include/c++/4.6/string:40,
                 from build/libs/host/include/host/pseudolocalize.h:4,
                 from build/libs/host/pseudolocalize.cpp:1:
/usr/include/features.h:323:26: 致命錯誤: bits/predefs.h:沒有那個文件或目錄
編譯中斷。

make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/pseudolocalize.o] 錯誤 1

 

注意:某些輸入文件使用或覆蓋了已過時的 API。
注意:要了解詳細信息,請使用 -Xlint:deprecation 重新編譯。
注意:某些輸入文件使用了未經檢查或不安全的操作。

注意:要了解詳細信息,請使用 -Xlint:unchecked 重新編譯。

解決方法:sudo apt-get install libc6-dev-i386

http://www.blogjava.net/ZircoN/archive/2011/11/13/363452.html

錯誤2:

frameworks/base/libs/utils/RefBase.cpp: 在成員函數‘void android::RefBase::weakref_type::trackMe(bool, bool)’中:
frameworks/base/libs/utils/RefBase.cpp:483:67: 錯誤: 將‘const android::RefBase::weakref_impl’作為‘void android::RefBase::weakref_impl::trackMe(bool, bool)’的‘this’實參時丟棄了類型限定 [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] 錯誤 1
make: *** 正在等待未完成的任務....
frameworks/base/libs/utils/ResourceTypes.cpp: 在成員函數‘void android::ResTable::print(bool) const’中:
frameworks/base/libs/utils/ResourceTypes.cpp:4369:84: 警告: 將一個整數轉換為大小不同的指針 [-Wint-to-pointer-cast]

frameworks/base/libs/utils/ResourceTypes.cpp:4375:43: 警告: 將一個整數轉換為大小不同的指針 [-Wint-to-pointer-cast]

參考網上的解決方法:

$ gedit frameworks/base/libs/utils/Android.mk

將下面一行

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)

改成

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) –fpermissive

http://www.blogjava.net/ZircoN/archive/2011/11/13/363452.html

問題並沒有解決,反而又出現了新的錯誤:

host C++: libutils <= frameworks/base/libs/utils/Asset.cpp
g++: –fpermissive:沒有那個文件或目錄
注意:某些輸入文件使用或覆蓋了已過時的 API。
注意:要了解詳細信息,請使用 -Xlint:deprecation 重新編譯。
注意:某些輸入文件使用了未經檢查或不安全的操作。
注意:要了解詳細信息,請使用 -Xlint:unchecked 重新編譯。
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/Asset.o] 錯誤 1
make: *** 正在刪除文件“out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/Asset.o”

make: *** 正在等待未完成的任務....

這個錯誤主要是gcc版本過高引起的:最終解決辦法是:

11.10的gcc版本過高

http://hi.baidu.com/designhouse/blog/item/fec5cdbf8d6a231618d81fc1.html)

ubuntu 11.10的gcc版本是4.6.1,版本太高,編譯android時出錯,要把gcc版本改為4.4.3。

通過gcc -v命令可以發現gcc庫在/usr/lib/gcc/i686-linux-gnu目錄下,該目錄下有當前系統支持的各種版本gcc庫 。在安裝gcc 4.4前該目錄下是沒有4.4目錄的,安裝gcc 4.4后該目錄下就會多出4.4這個目錄,且該4.4目錄下有各種相應庫文件。

ubuntu 32bit系統下安裝gcc 4.4的最好方法是僅用以下兩條命令,不需要其它命令,否則編譯時可能會出錯。

sudo apt-get install gcc-4.4

sudo apt-get install g++-4.4

 

 
裝完后在/usr/bin目錄下

$ ls -l gcc*

lrwxrwxrwx 1 root root      7 2011-10-29 09:11 gcc -> gcc-4.6

-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4

-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6

發現gcc 鏈接到gcc-4.6,  需要將它改為鏈接到gcc-4.4 :

sudo mv gcc gcc.bak

sudo ln -s gcc-4.4 gcc

$ls -l g++*

sudo -s

mv g++-4.4 g++

g++ -v

 

 

錯誤3:

g++: g++: selected multilib '32' not installed
selected multilib '32' not installed
make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl] 錯誤 1
make: *** 正在等待未完成的任務....
make: *** [out/host/linux-x86/obj/lib/libESR_Portable.so] 錯誤 1

解決方法:

輸入:sudo apt-get install gcc-multilib

sudo apt-get install g++-multilib后出現新問題:

 

g++: g++: host SharedLib: libfst (out/host/linux-x86/obj/lib/libfst.so)
g++: selected multilib '32' not installedselected multilib '32' not installed

selected multilib '32' not installed
make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl] 錯誤 1
make: *** 正在等待未完成的任務....
make: *** [out/host/linux-x86/obj/lib/libESR_Portable.so] 錯誤 1

make: *** [out/host/linux-x86/obj/lib/libfst.so] 錯誤 1

解決方法

 

 sudo apt-get install libc6-dev ia32-libs lib32ncurses5-dev x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev libgl1-mesa-dev mingw32 tofrodos python-markdown libxml2-utils

sudo apt-get install g++-4.4-multilib

錯誤4:

 


Could not load 'clearsilver-jni'
java.library.path = out/host/linux-x86/lib
Could not load 'clearsilver-jni'
java.library.path = out/host/linux-x86/lib
make: *** [out/target/common/docs/api-stubs-timestamp] 錯誤 45
make: *** 正在等待未完成的任務....
make: *** [out/target/common/docs/doc-comment-check-timestamp] 錯誤 45

解決方法:

這是由於clearsilver 在編譯時如果檢測到使用Java JDK 6,就使用64位編譯。要避開此錯誤,需要修改下面四個文件:

* external/clearsilver/cgi/Android.mk
* external/clearsilver/java-jni/Android.mk
* external/clearsilver/util/Android.mk
* external/clearsilver/cs/Android.mk

把這四個Makefile中的下列語句注掉即可:

# This forces a 64-bit build for Java6
# Comment by Easwy
# LOCAL_CFLAGS += -m64
# LOCAL_LDFLAGS += -m64

然后在external/clearsilver目錄中執行一下make clean,然后回到項目根目錄,繼續make即可。

當編譯完成時,生成的image文件放在out/target/product/generic目錄中。


gedit /root/.bashrc
export PATH=/root/android/mydroid/out/host/linux-x86/bin:$PATH
export ANDROID_PRODUCT_OUT=/root/android/mydroid/out/target/product/generic
export ANDROID_SWT=/root/android/mydroid/out/host/linux-x86/framework

在源碼目錄下的out/target/product/generic/目錄下運行
emulator -image system.img -data userdata.img -ramdisk ramdisk.img 命令

錯誤5:

 emulator

NAND: could not write file system.img, File exists

 

 

 

編譯android4.0遇到gcc和g++編譯器的問題解決方法

572人閱讀 評論(0) 收藏 舉報

很多人在編譯android4.0中可能遇到一些列問題,比如說其中一個就是GCC版本過高。

/usr/include/features.h:323:26: 致命錯誤: bits/predefs.h:沒有那個文件或目錄

編譯中斷。
make: *** [out/host/linux-x86/obj/EXECUTABLES/mkbootfs_intermediates/mkbootfs.o] 錯誤 1
make: *** 正在等待未完成的任務….
In file included from /usr/include/stdlib.h:25:0,
from build/tools/acp/acp.c:11:
/usr/include/features.h:323:26: 致命錯誤: bits/predefs.h:沒有那個文件或目錄
編譯中斷。

或者是這個現象

<command-line>:0:0: error: "_FORTIFY_SOURCE" redefined [-Werror]
 <built-in>:0:0: note: this is the location of the previous definition
 cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1

上述兩個問題都是由於:

 

ubuntu 11.10的gcc版本是4.6.1,版本太高,編譯android時出錯,要把gcc版本改為4.4.3。

廢話不多說了,直接寫解決方法吧;

ubuntu 系統下安裝gcc 4.4的方法是僅用以下兩條命令。

sudo apt-get install gcc-4.4

sudo apt-get install g++-4.4

裝完后在/usr/bin目錄下

$ ls -l gcc*

lrwxrwxrwx 1 root root      7 2011-10-29 09:11 gcc -> gcc-4.6

-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4

-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6

這時會發現gcc 鏈接到gcc-4.6,  需要將它改為鏈接到gcc-4.4 :

sudo mv gcc gcc.bak

sudo ln -s gcc-4.4 gcc

同理

ls -l g++*

lrwxrwxrwx 1 root root      7 2011-08-14 15:17 g++ -> g++-4.6

-rwxr-xr-x 1 root root 228640 2011-10-06 05:45 g++-4.4

-rwxr-xr-x 1 root root 306200 2011-09-17 05:39 g++-4.6

需要將g++鏈接改為g++-4.4:

/usr/bin$ sudo mv g++ g++.bak

/usr/bin$sudo ln -s g++-4.4 g++

再查看gcc和g++版本號:
gcc -v
g++ -v
 
以上方法還是不行。
 
/usr/include/features.h:324:26: fatal error: bits/predefs.h: No such file or directoryIn file included from /home/hudan/android/source/android4.1.1/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6/bin/../sysroot/usr/include/sys/types.h:27:0,
                 from frameworks/native/include/utils/Errors.h:20,
                 from frameworks/native/include/utils/String8.h:20,
                 from cts/suite/audio_quality/lib/include/Settings.h:21,
                 from cts/suite/audio_quality/lib/src/Settings.cpp:17:
/usr/include/features.h:324:26: fatal error: bits/predefs.h: No such file or directoryIn file included from /usr/include/stdlib.h:25:0,
                 from cts/suite/audio_quality/lib/src/Adb.cpp:16:
/usr/include/features.h:324:26: fatal error: bits/predefs.h: No such file or directory
 
compilation terminated.
compilation terminated.
 
compilation terminated.
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libcts_audio_quality_intermediates/src/SimpleScriptExec.o] Error 1
make: *** Waiting for unfinished jobs....
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libcts_audio_quality_intermediates/src/Adb.o] Error 1
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libcts_audio_quality_intermediates/src/Settings.o] Error 1
In file included from /usr/include/semaphore.h:22:0,
                 from cts/suite/audio_quality/lib/include/Semaphore.h:21,
                 from cts/suite/audio_quality/lib/src/Semaphore.cpp:17:
/usr/include/features.h:324:26: fatal error: bits/predefs.h: No such file or directory
compilation terminated.
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libcts_audio_quality_intermediates/src/Semaphore.o] Error 
解決方法:sudo apt-get install gcc-multilib 
 
以上方法還有問題!
 
g++: g++: selected multilib '32' not installed
sudo apt-get install g++-multilib
sudo apt-get install libc6-dev ia32-libs lib32ncurses5-dev x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev libgl1-mesa-dev mingw32 tofrodos python-markdown libxml2-utils
sudo apt-get install g++-4.4-multilib

 

 

 

第一個錯誤是:

很多人在編譯android4.0中可能遇到一些列問題,比如說其中一個就是GCC版本過高。

————————————————————————————————–

例如:

/usr/include/features.h:323:26: 致命錯誤: bits/predefs.h:沒有那個文件或目錄

編譯中斷。
make: *** [out/host/linux-x86/obj/EXECUTABLES/mkbootfs_intermediates/mkbootfs.o] 錯誤 1
make: *** 正在等待未完成的任務….
In file included from /usr/include/stdlib.h:25:0,
from build/tools/acp/acp.c:11:
/usr/include/features.h:323:26: 致命錯誤: bits/predefs.h:沒有那個文件或目錄
編譯中斷。

ubuntu 11.10的gcc版本是4.6.1,版本太高,編譯android時出錯,要把gcc版本改為4.4.3。

廢話不多說了,直接寫解決方法吧;

ubuntu 系統下安裝gcc 4.4的方法是僅用以下兩條命令。

sudo apt-get install gcc-4.4

sudo apt-get install g++-4.4

裝完后在/usr/bin目錄下

$ ls -l gcc*

lrwxrwxrwx 1 root root      7 2011-10-29 09:11 gcc -> gcc-4.6

-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4

-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6

這時會發現gcc 鏈接到gcc-4.6,  需要將它改為鏈接到gcc-4.4 :

sudo mv gcc gcc.bak

sudo ln -s gcc-4.4 gcc

同理

ls -l g++*

lrwxrwxrwx 1 root root      7 2011-08-14 15:17 g++ -> g++-4.6

-rwxr-xr-x 1 root root 228640 2011-10-06 05:45 g++-4.4

-rwxr-xr-x 1 root root 306200 2011-09-17 05:39 g++-4.6

需要將g++鏈接改為g++-4.4:

 

/usr/bin$ sudo mv g++ g++.bak

/usr/bin$sudo ln -s g++-4.4 g++

再查看gcc和g++版本號:
gcc -v
g++ -v

 

 

 

 

錯誤1:

 

注意:external/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessageLite.java 使用了未經檢查或不安全的操作。

注意:要了解詳細信息,請使用 -Xlint:unchecked 重新編譯。
注意:external/protobuf/java/src/main/java/com/google/protobuf/micro/CodedInputStreamMicro.java 使用了未經檢查或不安全的操作。
注意:要了解詳細信息,請使用 -Xlint:unchecked 重新編譯。
Generated: (out/target/product/generic/android-info.txt)
host C: acp <= build/tools/acp/acp.c
host C++: libhost <= build/libs/host/pseudolocalize.cpp
host C: libhost <= build/libs/host/CopyFile.c
<命令行>:0:0: 警告: “_FORTIFY_SOURCE”重定義 [默認啟用]
<built-in>:0:0: 附注: 這是先前定義的位置
<命令行>:0:0: 警告: “_FORTIFY_SOURCE”重定義 [默認啟用]
<built-in>:0:0: 附注: 這是先前定義的位置
In file included from build/libs/host/CopyFile.c:11:0:
build/libs/host/include/host/CopyFile.h:5:22: 致命錯誤: sys/stat.h:沒有那個文件或目錄
編譯中斷。
In file included from /usr/include/stdlib.h:25:0,
                 from build/tools/acp/acp.c:11:
/usr/include/features.h:323:26: 致命錯誤: bits/predefs.h:沒有那個文件或目錄
編譯中斷。
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/CopyFile.o] 錯誤 1
make: *** 正在等待未完成的任務....
make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] 錯誤 1
<命令行>:0:0: 警告: “_FORTIFY_SOURCE”重定義 [默認啟用]
<built-in>:0:0: 附注: 這是先前定義的位置
In file included from /usr/include/c++/4.6/x86_64-linux-gnu/32/bits/os_defines.h:40:0,
                 from /usr/include/c++/4.6/x86_64-linux-gnu/32/bits/c++config.h:392,
                 from /usr/include/c++/4.6/string:40,
                 from build/libs/host/include/host/pseudolocalize.h:4,
                 from build/libs/host/pseudolocalize.cpp:1:
/usr/include/features.h:323:26: 致命錯誤: bits/predefs.h:沒有那個文件或目錄
編譯中斷。

make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/pseudolocalize.o] 錯誤 1

 

 

注意:某些輸入文件使用或覆蓋了已過時的 API。
注意:要了解詳細信息,請使用 -Xlint:deprecation 重新編譯。
注意:某些輸入文件使用了未經檢查或不安全的操作。

注意:要了解詳細信息,請使用 -Xlint:unchecked 重新編譯。

 

解決方法:sudo apt-get install libc6-dev-i386

 

http://www.blogjava.net/ZircoN/archive/2011/11/13/363452.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM