带有Studio on Mac的Android NDK:无法识别的操作码

时间:2017-03-16 13:04:00

标签: android-ndk android-gradle

Android NDK开发新手,我正在尝试使用ndkBuild在Mac下的Android Studio下构建一个Android应用程序,该应用程序旨在使用Eclipse for Linux进行构建。

使用“无法识别的操作码”进行组装失败。我认为这是目标处理器的某种交叉编译问题,但我不知道如何使用ndkBuild配置它。执行此编译所需的Linux头文件是从同一台Mac上的Ubuntu VM复制的。

知道如何解决这个程序集错误吗?

这是我的build.gradle:

defaultConfig {
    applicationId "net.kismetwireless.android.pcapcapture"
    minSdkVersion 13
    targetSdkVersion 15

    ndk {
        moduleName "libpcap"
    }
    externalNativeBuild {
        ndkBuild {
            cFlags "-Wno-return-type"
        }
    }

}

externalNativeBuild {
    ndkBuild {
        path "src/main/jni/Android.mk"
    }
}

我的Android.mk看起来像这样:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= libpcap
LOCAL_SRC_FILES:= \
    libpcap-1.3.0/pcap-linux.c \
    libpcap-1.3.0/fad-null.c \
    libpcap-1.3.0/pcap.c \
    libpcap-1.3.0/inet.c \
    libpcap-1.3.0/gencode.c \
    libpcap-1.3.0/optimize.c \
    libpcap-1.3.0/nametoaddr.c \
    libpcap-1.3.0/etherent.c \
    libpcap-1.3.0/savefile.c \
    libpcap-1.3.0/sf-pcap.c \
    libpcap-1.3.0/sf-pcap-ng.c \
    libpcap-1.3.0/pcap-common.c \
    libpcap-1.3.0/bpf_image.c \
    libpcap-1.3.0/bpf_dump.c \
    libpcap-1.3.0/scanner.c \
    libpcap-1.3.0/grammar.c \
    libpcap-1.3.0/bpf_filter.c \
    libpcap-1.3.0/version.c \
    pcap_jni.c
#include $(BUILD_EXECUTABLE)
LOCAL_CFLAGS    := -DSYS_ANDROID=1 -Dyylval=pcap_lval -DHAVE_CONFIG_H  -D_U_="__attribute__((unused))" -I$(LOCAL_PATH)/libpcap-1.3.0
LOCAL_LDLIBS    := -llog
include $(BUILD_SHARED_LIBRARY)

运行./gradlew build时,我的错误输出如下所示:

  /var/folders/k6/80v30vf13kdc8qd2rjtq35640000gn/T/pcap-linux-60f203.s: Assembler messages:
  /var/folders/k6/80v30vf13kdc8qd2rjtq35640000gn/T/pcap-linux-60f203.s:357: Error: unrecognized opcode `rorw $8,$23'
...
  /var/folders/k6/80v30vf13kdc8qd2rjtq35640000gn/T/pcap-linux-60f203.s:8369: Error: unrecognized opcode `rorw $8,$2'
  clang: error: assembler command failed with exit code 1 (use -v to see invocation)
  make: *** [/Users/dyoung/workspace/wireless-r/android-pcap-studio/app/build/intermediates/ndkBuild/debug/obj/local/mips64/objs/pcap/libpcap-1.3.0/pcap-linux.o] Error 1

1 个答案:

答案 0 :(得分:1)

对于Android版本,请使用Android头文件。如果某些标头在NDK中不可用,您可以使用android.googlesource.com/platform/external/kernel-headers

请注意,这些标头取决于ABI和API level。如果某些头文件在NDK for android-14中丢失或不完整但可以在android-21中找到它并不一定意味着所需的内核函数不可用,但你应该格外小心。

最新的NDK r14提出了一种使用Android头文件的新方法,他们称之为Unified headers。此开关应该减少麻烦并使Android构建更容易。但是这个功能尚未经过足够的测试。