2013-04-23 2 views
0

J'ai une application qui comprend une bibliothèque initialement compilée pour la version 3 de l'Android NDK. L'application a été mis de côté pendant un moment, et maintenant j'essaie de le ressusciter sur la dernière version (Windows 64 bit r8e) du NDK. J'ai corrigé la plupart des petites bizarreries, mais j'ai des problèmes de compilation pour armeabi. Plus précisément, j'obtiens une erreur "erreur de verrouillage des instructions". De certaines recherches, j'ai compris que cet assembly n'est pas valide pour arm - et en fait il compile bien si je mets APP_ABI en x86 - mais ce que je ne comprends pas c'est pourquoi il génère ce qui semble être du code x86 si J'ai choisi le bras à construire, d'autant plus que le code de bras r3 peut être généré à partir des mêmes fichiers .cpp. Merci.Mauvaise instruction 'lock' compilant pour armeabi avec le NDK Android

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 

Sortie

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 

Répondre

0

Il se trouve que, quelqu'un avait glissé un code d'assembleur x86 en ce que je n'étais pas conscient de. J'ai été capable de #ifdef cela, et maintenant ça fonctionne bien pour le bras.

Questions connexes