0

Android NDK のバージョン 3 用にコンパイルされたライブラリを含むアプリケーションがあります。このアプリケーションはしばらく放置されていましたが、現在、NDK の最新 (Windows 64 ビット r8e) バージョンで復活させようとしています。小さな癖のほとんどは修正しましたが、armeabi のコンパイルで問題が発生しています。具体的には、「bad instruction 'lock'」というエラーが表示されます。いくつかの検索から、このアセンブリはアームに対して有効ではないことがわかりました-実際、APP_ABIをx86に設定すると正常にコンパイルされます-しかし、理解できないのは、x86コードのように見えるものを生成する理由です特に r3 では arm コードを同じ .cpp ファイルから生成できるため、構築する arm を選択しました。ありがとう。

アプリケーション.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
4

2 に答える 2