當前位置:首頁 » 編程軟體 » 安卓arm編譯器

安卓arm編譯器

發布時間: 2022-05-07 23:35:17

A. 新人求教,編譯一個最簡單的Android程序,提示下面的錯誤咋解決

1、32位系統下的編譯

如果需要在32位系統中編譯android系統,在編譯前需要對部分makefile進行修改

首先修改build/core/main.mk,修改的內容如下所示:

-ifneq (64,$(findstring 64,$(build_arch)))

+ifneq
(i686,$(findstring i686,$(build_arch)))

$(warning
************************************************************) $(warning You are attempting to build on a 32-bit system.)

$(warning Only 64-bit build environments are supported beyond froyo/2.2.)

其次修改如下四個文件:

external/clearsilver/cgi/Android.mk
external/clearsilver/java-jni/Android.mk
external/clearsilver/util/Android.mk
external/clearsilver/cs/Android.mk # This forces a 64-bit build for Java6
-LOCAL_CFLAGS += -m64
-LOCAL_LDFLAGS += -m64
+LOCAL_CFLAGS += -m32
+LOCAL_LDFLAGS += -m32即將LOCAL_CFLAGS和LOCAL_LDFLAGS由-m64改為-m32,從而指定使用32位系統進行編譯如果使用 64bit 的操作系統編譯,這些就都不用修改,但記得需要安裝:For 64-bit servers the following extra packages may be needed:
"sudo apt-get install libc6-dev-i386" (libc6-dev-amd64 if AMD CPU)
"sudo apt-get install g++-multilib lib32ncurses5-dev lib32z1-dev"
還有 jdk64bit 的版本編譯2 、build/core/base_rules.mk:128:*** frameworks/opt/emoji/jni:
.... libgl2jni already defined by framwworks/base/opengl/tests/gl2_jni/jni 停止

從編譯規則上看:
# Make sure that this IS_HOST/CLASS/MODULE combination is unique.
mole_id := MODULE.$(if \
$(LOCAL_IS_HOST_MODULE),HOST,TARGET).$(LOCAL_MODULE_CLASS).$(LOCAL_MODULE)
ifdef $(mole_id)
$(error $(LOCAL_PATH): $(mole_id) already defined by $($(mole_id)))
endif

在framwworks/base/opengl/tests/gl2_jni/下面定義的android.mk定義了:
LOCAL_MODULE := libgl2jni
include $(BUILD_SHARED_LIBRARY)
導致生成的動態庫重復,這是不對的,修改tests這個目錄不參與編譯即可,最直接的辦法刪除掉framwworks/base/opengl/tests/gl2_jni這個文件夾

3、AIDL 編譯報couldn't find import for class原因
「AIDL服務只支持有限的數據類型,因此,如果用AIDL服 務傳遞一些復雜的數據就需要做更一步處理。AIDL服務支持的數據類型如下:
Java的簡單類 型(int、char、boolean等)。不需要導入(import)。String和 CharSequence。不需要導入(import)。
List和 Map。但要注意,List和Map對象的元素類型必須是AIDL服務支持的數據類型。不需要導入(import)。AIDL自動生成 的介面。需要導入(import)。
實現 android.os.Parcelable介面的類。需要導入(import)。
其中後兩種數據類 型需要使用import進行導入,傳遞不需要 import的數據類型的值的方式相同。傳遞一個需要import的數據類型的值(例如,實現android.os.Parcelable 介面的類)的步 驟略顯復雜。除了要建立一個實現android.os.Parcelable介面的類外,還需要為這個類單獨建立一個aidl文件,並使用parcelable關鍵字進行定義。」
沒有加LOCAL_AIDL_INCLUDES += xxx ,所以找不到我的parcelable aidl文件。

修改android源碼根目錄下的build/core/pathmap.mk把你的目錄加進去,此時再make update-api

4、老是提示 @Override錯誤 方法未覆蓋其父類的方法
使 用JDK1.6編譯沒有問題,使用JDK1.5編譯,會報@Override方法未覆蓋其父類的方法。實際上這個方法是類實現的介面中方法,
但是,這個語 法的jdk1.6的下面是可以通過的,也就是說jdk1.6認為類覆蓋父類方法與實現介面方法都叫override,而jdk1.5不
是這樣認為的,不知 道這是當初jdk1.5的bug,還是當初就是認為覆蓋父類方法與實現介面方法是不一樣的,不得而知。但是從
OO角度來看,覆蓋父類方法與實現介面方法都 可以認為override,因為他們目的都是一樣的,都是為了重用,都是多態的一種
表現方式。

更改jdk版本為1.6即可

5、編譯alsa-lib庫錯誤

android系統開發移植alsa-lib庫的過程中編譯的時候出現了如下的錯誤
/tmp/cckyaR40.s: Assembler messages:
/tmp/cckyaR40.s:2763: Error: selected processor does not support `mrs ip,cpsr'
/tmp/cckyaR40.s:2764: Error: unshifted register required -- `orr r2,ip,#128'
/tmp/cckyaR40.s:2765: Error: selected processor does not support `msr cpsr_c,r2
字面的意思報的是匯編錯誤,選擇的處理器不支持mrs和msr指令。
原來的ARM指令有32位和16位兩種指令模式,16位為thumb指令集,thumb指令集編譯出的代碼佔用空間小,
而且效率也高,所以android的arm編譯器默認用的是thumb模式編譯,問題在於alsa的代碼中有部分的內容
用到了32位的指令,所以才會報如下的錯誤,修改的方法也很簡單,在Android.mk中加入如下內容即可:
LOCAL_ARM_MODE := arm
android的編譯系統中LOCAL_ARM_MODE變數的取值為arm或者thumb,代表32位和16位兩種arm指令集,默認為thumb
prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/../../../../arm-eabi/bin/ld: failed to set dynamic section sizes: Bad value

collect2: ld returned 1 exit status
make: *** [out/target/proct/merlin/obj/SHARED_LIBRARIES/libasound_intermediates/LINKED/libasound.so] 錯誤 1
解決此問題將alsa-lib/include/config.h文件中的如下宏定義去掉即可:
#define VERSIONED_SYMBOLS

開發過程中碰到過很多錯誤,後續再一一總結記錄下來,有些忘記了。。

在android.mk中編譯:

include $(CLEAR_VARS)
$(call add-prebuilt-files, STATIC_LIBRARIES, libyfcdca.a)

出現提示需要定義:LOCAL_MODULE_TAGS := optional 一般修改方法是:

build\core\definitions.mk 中的宏定義變數:

define include-prebuilt
include $$(CLEAR_VARS)
LOCAL_SRC_FILES := $(1)
LOCAL_BUILT_MODULE_STEM := $(1)
LOCAL_MODULE_SUFFIX := $$(suffix $(1))
LOCAL_MODULE := $$(basename $(1))
LOCAL_MODULE_CLASS := $(2)
include $$(BUILD_PREBUILT)
endef

在這里增加一個LOCAL_MODULE_TAGS := optional

但是這需要修改android源碼,如果不是自已的android系統,這么做就麻煩了,所以必須想其它辦法解決:

#include $(CLEAR_VARS)
#$(call add-prebuilt-files, STATIC_LIBRARIES, libyfcdca.a)

include $(CLEAR_VARS)
LOCAL_SRC_FILES := libyfcdca.a
LOCAL_BUILT_MODULE_STEM := libyfcdca.a
LOCAL_MODULE_SUFFIX := lib
LOCAL_MODULE := yfcdca
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_TAGS := optional
include $(BUILD_PREBUILT)

如此即可了。供你參考
1、32位系統下的編譯

如果需要在32位系統中編譯android系統,在編譯前需要對部分makefile進行修改

首先修改build/core/main.mk,修改的內容如下所示:

-ifneq (64,$(findstring 64,$(build_arch)))

+ifneq
(i686,$(findstring i686,$(build_arch)))

$(warning
************************************************************) $(warning You are attempting to build on a 32-bit system.)

$(warning Only 64-bit build environments are supported beyond froyo/2.2.)

其次修改如下四個文件:

external/clearsilver/cgi/Android.mk
external/clearsilver/java-jni/Android.mk
external/clearsilver/util/Android.mk
external/clearsilver/cs/Android.mk # This forces a 64-bit build for Java6
-LOCAL_CFLAGS += -m64
-LOCAL_LDFLAGS += -m64
+LOCAL_CFLAGS += -m32
+LOCAL_LDFLAGS += -m32即將LOCAL_CFLAGS和LOCAL_LDFLAGS由-m64改為-m32,從而指定使用32位系統進行編譯如果使用 64bit 的操作系統編譯,這些就都不用修改,但記得需要安裝:For 64-bit servers the following extra packages may be needed:
"sudo apt-get install libc6-dev-i386" (libc6-dev-amd64 if AMD CPU)
"sudo apt-get install g++-multilib lib32ncurses5-dev lib32z1-dev"
還有 jdk64bit 的版本編譯2 、build/core/base_rules.mk:128:*** frameworks/opt/emoji/jni:
.... libgl2jni already defined by framwworks/base/opengl/tests/gl2_jni/jni 停止

從編譯規則上看:
# Make sure that this IS_HOST/CLASS/MODULE combination is unique.
mole_id := MODULE.$(if \
$(LOCAL_IS_HOST_MODULE),HOST,TARGET).$(LOCAL_MODULE_CLASS).$(LOCAL_MODULE)
ifdef $(mole_id)
$(error $(LOCAL_PATH): $(mole_id) already defined by $($(mole_id)))
endif

在framwworks/base/opengl/tests/gl2_jni/下面定義的android.mk定義了:
LOCAL_MODULE := libgl2jni
include $(BUILD_SHARED_LIBRARY)
導致生成的動態庫重復,這是不對的,修改tests這個目錄不參與編譯即可,最直接的辦法刪除掉framwworks/base/opengl/tests/gl2_jni這個文件夾

3、AIDL 編譯報couldn't find import for class原因
「AIDL服務只支持有限的數據類型,因此,如果用AIDL服 務傳遞一些復雜的數據就需要做更一步處理。AIDL服務支持的數據類型如下:
Java的簡單類 型(int、char、boolean等)。不需要導入(import)。String和 CharSequence。不需要導入(import)。
List和 Map。但要注意,List和Map對象的元素類型必須是AIDL服務支持的數據類型。不需要導入(import)。AIDL自動生成 的介面。需要導入(import)。
實現 android.os.Parcelable介面的類。需要導入(import)。
其中後兩種數據類 型需要使用import進行導入,傳遞不需要 import的數據類型的值的方式相同。傳遞一個需要import的數據類型的值(例如,實現android.os.Parcelable 介面的類)的步 驟略顯復雜。除了要建立一個實現android.os.Parcelable介面的類外,還需要為這個類單獨建立一個aidl文件,並使用parcelable關鍵字進行定義。」
沒有加LOCAL_AIDL_INCLUDES += xxx ,所以找不到我的parcelable aidl文件。

修改android源碼根目錄下的build/core/pathmap.mk把你的目錄加進去,此時再make update-api

4、老是提示 @Override錯誤 方法未覆蓋其父類的方法
使 用JDK1.6編譯沒有問題,使用JDK1.5編譯,會報@Override方法未覆蓋其父類的方法。實際上這個方法是類實現的介面中方法,
但是,這個語 法的jdk1.6的下面是可以通過的,也就是說jdk1.6認為類覆蓋父類方法與實現介面方法都叫override,而jdk1.5不
是這樣認為的,不知 道這是當初jdk1.5的bug,還是當初就是認為覆蓋父類方法與實現介面方法是不一樣的,不得而知。但是從
OO角度來看,覆蓋父類方法與實現介面方法都 可以認為override,因為他們目的都是一樣的,都是為了重用,都是多態的一種
表現方式。

更改jdk版本為1.6即可

5、編譯alsa-lib庫錯誤

android系統開發移植alsa-lib庫的過程中編譯的時候出現了如下的錯誤
/tmp/cckyaR40.s: Assembler messages:
/tmp/cckyaR40.s:2763: Error: selected processor does not support `mrs ip,cpsr'
/tmp/cckyaR40.s:2764: Error: unshifted register required -- `orr r2,ip,#128'
/tmp/cckyaR40.s:2765: Error: selected processor does not support `msr cpsr_c,r2
字面的意思報的是匯編錯誤,選擇的處理器不支持mrs和msr指令。
原來的ARM指令有32位和16位兩種指令模式,16位為thumb指令集,thumb指令集編譯出的代碼佔用空間小,
而且效率也高,所以android的arm編譯器默認用的是thumb模式編譯,問題在於alsa的代碼中有部分的內容
用到了32位的指令,所以才會報如下的錯誤,修改的方法也很簡單,在Android.mk中加入如下內容即可:
LOCAL_ARM_MODE := arm
android的編譯系統中LOCAL_ARM_MODE變數的取值為arm或者thumb,代表32位和16位兩種arm指令集,默認為thumb
prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/../../../../arm-eabi/bin/ld: failed to set dynamic section sizes: Bad value

collect2: ld returned 1 exit status
make: *** [out/target/proct/merlin/obj/SHARED_LIBRARIES/libasound_intermediates/LINKED/libasound.so] 錯誤 1
解決此問題將alsa-lib/include/config.h文件中的如下宏定義去掉即可:
#define VERSIONED_SYMBOLS

開發過程中碰到過很多錯誤,後續再一一總結記錄下來,有些忘記了。。

在android.mk中編譯:

include $(CLEAR_VARS)
$(call add-prebuilt-files, STATIC_LIBRARIES, libyfcdca.a)

出現提示需要定義:LOCAL_MODULE_TAGS := optional 一般修改方法是:

build\core\definitions.mk 中的宏定義變數:

define include-prebuilt
include $$(CLEAR_VARS)
LOCAL_SRC_FILES := $(1)
LOCAL_BUILT_MODULE_STEM := $(1)
LOCAL_MODULE_SUFFIX := $$(suffix $(1))
LOCAL_MODULE := $$(basename $(1))
LOCAL_MODULE_CLASS := $(2)
include $$(BUILD_PREBUILT)
endef

在這里增加一個LOCAL_MODULE_TAGS := optional

但是這需要修改android源碼,如果不是自已的android系統,這么做就麻煩了,所以必須想其它辦法解決:

#include $(CLEAR_VARS)
#$(call add-prebuilt-files, STATIC_LIBRARIES, libyfcdca.a)

include $(CLEAR_VARS)
LOCAL_SRC_FILES := libyfcdca.a
LOCAL_BUILT_MODULE_STEM := libyfcdca.a
LOCAL_MODULE_SUFFIX := lib
LOCAL_MODULE := yfcdca
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_TAGS := optional
include $(BUILD_PREBUILT)

如此即可了。

B. ARM編譯器

可以

話說,目前業內一般都是用keil編譯器的,它支持的晶元種類還更多

C. arm 主流的編譯器有哪些

windows環境常用的有iar和keil。ads已經被keil取代停產了。
keil現在是官方開發軟體。iar上手比較麻煩,但效率高點。其實差不多。

linux下可能就是gcc手動編譯,十分麻煩。沒接觸過

D. 1.ARM編譯器是一款什麼樣的軟體 2.ARM產品線包含哪些產品 3.ARM代理商目前有哪些

ARM處理器是Acorn計算機有限公司面向低預算市場設計的第一款RISC微處理器。1978年12月5日,物理學家赫爾曼·豪澤(Hermann Hauser)和工程師Chris Curry,在英國劍橋創辦了CPU公司(Cambridge Processing Unit),主要業務是為當地市場供應電子設備。1979年,CPU公司改名為Acorn計算機公司。ARM處理器的三大特點是:耗電少功能強、8位/16位/32位雙指令集和市場用戶廣。
ARM開發工具
杭州通格信息技術有限公司是ARM公司官方授權的,浙江區全線開發工具產品代理商,提供ARM公司工具產品在國內的銷售、更新、升級和技術支持等服務。
軟體開發工具:DS-5、RVDS、Keil MDK-ARM、Keil C51、Keil C166、Keil C251。
模擬器:DSTREAM、RVI&RVT2、ULINK2、ULINKpro、ULINK-ME。
ARM內核FPGA開發板:ARM9、ARM11、Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A12、Cortex-A15、Cortex-A53和Cortex-A57開發板。
Keil MCU開發板:基於ARM7、ARM9、Cortex-M0、M3、M4內核的NXP、ST晶元系列開發板。
杭州通格信息技術有限公司是ARM公司在浙江區全線開發工具代理商。上海攝氏度信息科技有限公司做全國的。

E. ARM編譯器有哪些

億道電子表示ARM提供廣泛的產品,包括:16/32位RISC微處理器、數據引擎、三維圖形處理器、數字單元庫、嵌入式存儲器、外設、軟體、開發工具以及模擬和高速連接產品。

F. Arm編譯器有什麼用

Arm RVDS 4.1中的Arm編譯器是唯一一個與Arm編譯器聯合開發的商用編譯器,專門設計用於為 Arm 編譯器架構程序並提供最優支持。該編譯器的開發歷經有20年左右,被公認為是業界標准 C 和 C++ 編譯器,用於生成面向 Arm、Thumb、Thumb-2、VFP 和 NEON 指令集的應用程序。詳情請到億道電子咨詢

G. Arm編譯器怎麼樣

億道電子表示使用 DS-5,可以輕松地為基於 Arm 處理器的平台開發 Linux 應用程序。它降低了學習難度,縮短了開發和測試周期,幫助您快速生成可靠的應用程序。 經濟實惠的專業解決方案,適用於以 C/C++ 開發 Linux 和 Android 應用程序和庫的開發人員。它利用諸如乙太網和 USB 等標准連接進行應用程序調試和系統性能分析。適用於基於 Linux 的系統的端對端軟體開發工具。此外還提供裸機和內核級別的調試與跟蹤功能。也包含了Arm唯一和處理器聯合開發的商用編譯器,提供強大完善的技術支持。

H. 怎麼安裝ARMtranslateARM編譯器

ARM Translator 安裝教程
解決Android x86 系統的兼容性問題
可以安裝各種安卓中文輸入法,允許各種安卓游戲,號稱可以兼容90%以上的安卓應用!
關鍵詞:Android x86中文輸入法應用兼容性。
在玩Android x86 系統的時候,很多童鞋們都發現沒有什麼應用可以用,連中文輸入法都找不到。然而4.0 rc2 系統發布時,也同時有了傳說中的ARM Translator,從此Android x86可以運行各種各樣的arm應用了!
向Arm Translator的原作者致敬。本人是在如下這個鏈接學到的http://www.charlesmaggs.com/home/vocation/links/linux-resources-current/embedded-linux/android
ARM Translator的安裝很簡單,只要下載兩個文件和一個文件夾復制到安卓x86系統的/system/lib下就好了。安裝需求:Android x86 4.0
文件1:http://www.buildroid.org/Download/libhoudini.so
文件2:http://www.buildroid.org/Download/libdvm_houdini.so
文件夾:http://www.buildroid.org/Download/houdini_armlibs.tgz
將最後一個鏈接的文件下載下來後,解壓縮得到一大堆文件,新建個文件夾叫做arm把這些文件放進去,然後把前兩個文件,和這個名叫arm的文件夾一起復制到Android x86 4.0的 /system/lib目錄下,修改好許可權,即可享用各種arm應用啦。
注意!最後一個鏈接下載得到的文件如果用winrar解壓,只能得到一個文件。請把這個文件的擴展名手工改成.tar,再解壓一次,即可得到45個小文件,這樣才是我們要的。
筆者的上網本原本不能用網路輸入法,完成上面的安裝後,果斷都能用了。親測了好多arm專屬的安卓應用,均可運行!

I. 為毛這么多軟體不能用arm編譯器怎麼裝

一般安裝了一個軟體,會包括編譯環境,編碼器,優化器等,現在都集成了很多,ARM支持C,匯編,高級的還有vc++ 比如我用的ads1.20 就有那麼多。
至於下程序到arm上,需要安裝一個軟體,我用的是HJTAG,因為我用JTAG模擬,所以我一共安裝了2個軟體。
但如果跑系統,你還得有頭文件,這個與你arm 用的操作系統有關,是代碼。
步驟肯定會有,1是你不會機器碼,在arm上就是機器碼,所以一定會有編譯器,但這些是集成的,下載軟體是燒程序的,這個和下載器配套。其他的是編寫程序相關的,初學者可以不跑系統,直接當單片機用,我至今只玩過ucos ,沒玩linux

熱點內容
動圖在線壓縮 發布:2025-05-14 03:35:24 瀏覽:131
w7共享無法訪問 發布:2025-05-14 03:35:24 瀏覽:481
為什麼微信會出現賬號密碼錯誤 發布:2025-05-14 03:03:30 瀏覽:692
幻影腳本官網 發布:2025-05-14 03:01:13 瀏覽:826
servlet的webxml怎麼配置 發布:2025-05-14 02:51:46 瀏覽:772
怎麼取消手勢密碼 發布:2025-05-14 02:51:11 瀏覽:639
openvpn搭建vpn伺服器搭建 發布:2025-05-14 02:47:52 瀏覽:998
密碼忘了從哪裡找 發布:2025-05-14 02:39:09 瀏覽:548
我的世界什麼伺服器有前途 發布:2025-05-14 02:30:31 瀏覽:528
java程序反編譯 發布:2025-05-14 02:18:46 瀏覽:458