2013-04-23 55 views
0

我有一個應用程序,其中包含一個最初爲Android NDK版本3編譯的庫。應用程序暫時擱置了一段時間,現在我試圖在NDK的最新版本(Windows 64位r8e)上重新生成它。我修復了大部分的小怪癖,但是我在編譯armeabi時遇到了問題。具體來說,我收到了一個「錯誤的指令」鎖定「錯誤。從一些搜索周圍,我已經知道這個程序集是無效的手臂 - 事實上,它編譯罰款,如果我將APP_ABI設置爲x86 - 但我不明白爲什麼它會生成看起來像x86代碼如果我選擇了arm,特別是因爲在r3下arm代碼可以從相同的.cpp文件生成。謝謝。使用Android NDK爲armeabi編譯錯誤指令'lock'

Application.mk

APP_STL   := stlport_static 
APP_MODULES  := DM 
APP_CPPFLAGS  := -w -g 
APP_ABI   := armeabi 

include $(call all-subdir-makefiles) 

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

# STLPORT_BASE := $(NDK_WRAPPERS_BASE)/stlport 
LOCAL_CFLAGS += -D__NEW__ \ 
        -DANDROID \ 
        -DOS_ANDROID 

LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib \ 
        -ldl \ 
        -lGLESv1_CM \ 
        -lEGL \ 
        -llog 

LOCAL_MODULE := DM 
LOCAL_SRC_FILES := \ 
    sample/test/Test.cpp 

輸出

ndk-build.cmd V=1 
"Compile++ thumb : DM <= Test.cpp 
D:/Projects/testProj/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++ -MMD -MP -MF ./obj/local/armeabi/objs/sample/test/Test.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -fno-exceptions -fno-rtti -mthumb -Os -g -DNDEBUG -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -ID:/Projects/testProj/android-ndk-r8e/sources/cxx-stl/stlport/stlport -ID:/Projects/testProj/android-ndk-r8e/sources/cxx-stl//gabi++/include -DANDROID -D__NEW__ -DANDROID -DOS_ANDROID -Wa,--noexecstack -frtti -w -g -ID:/Projects/testProj/android-ndk-r8e/platforms/android-9/arch-arm/usr/include -c jni/sample/test/Test.cpp -o ./obj/local/armeabi/objs/sample/test/Test.o 
C:\Temp\ccIqfvxp.s: Assembler messages: 
C:\Temp\ccIqfvxp.s:474: Error: bad instruction `lock' 
C:\Temp\ccIqfvxp.s:474: Error: immediate expression requires a # prefix -- `add 
r3,[r0,#4]' 
C:\Temp\ccIqfvxp.s:531: Error: bad instruction `lock' 
C:\Temp\ccIqfvxp.s:531: Error: immediate expression requires a # prefix -- `add 
r3,[r4,#4]' 
make: *** [obj/local/armeabi/objs/sample/test/Test.o] Error 1 

回答

0

事實證明,有人曾在我是不是偷偷一些x86彙編代碼意識到。我能夠#ifdef了這一點,現在它工作正常的手臂。