我有一个应用程序,其中包含一个最初为 Android NDK 版本 3 编译的库。该应用程序被搁置了一段时间,现在我正尝试在最新(Windows 64 位 r8e)版本的 NDK 上恢复它。我已经修复了大部分的小问题,但是我在为 armeabi 编译时遇到了问题。具体来说,我收到“错误指令‘锁定’”错误。通过一些搜索,我发现这个程序集对 arm 无效——事实上,如果我将 APP_ABI 设置为 x86,它编译得很好——但我不明白为什么它会生成看起来像 x86 的代码,如果我选择了要构建的 arm,特别是因为在 r3 下,arm 代码可以从相同的 .cpp 文件生成。谢谢。
应用程序.mk
APP_STL := stlport_static
APP_MODULES := DM
APP_CPPFLAGS := -w -g
APP_ABI := armeabi
include $(call all-subdir-makefiles)
安卓.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