LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := slabhidtouart
LOCAL_SRC_FILES := libslabhidtouart.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := TestJNI
### Add all source file names to be included in lib separated by a whitespace
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := TestJNI.cpp
LOCAL_SHARED_LIBRARIES := slabhidtouart
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/jni
include $(BUILD_SHARED_LIBRARY)
使用 ndk build 编译给出错误
testjni1//obj/local/armebai/libslabhidtouart.so: incompatible target
谁能告诉我哪里出错了
编辑:
using readelf -d i got this
Dynamic section at offset 0x1fd90 contains 28 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libusb-1.0.so.0]
0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]
0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000e (SONAME) Library soname: [libslabhidtouart.so.1]
一些库被标记为需要这意味着什么。
实际上,我对这类项目很陌生,所以我对自己需要什么以及接下来要做什么感到困惑。现在我得到了一些东西,比如我正在使用一个为另一个 cpu(x86_64)构建的库,我需要 ARM 库,谢谢你们,你让我清楚
最佳答案
这个引用:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := slabhidtouart
LOCAL_SRC_FILES := libslabhidtouart.so
include $(PREBUILT_SHARED_LIBRARY)
表示您要使用
libslabhidtouart.so
编译模块时。但是 .so 文件是仅与一种特定 cpu 架构/操作系统兼容的二进制文件。您收到的错误意味着 ndk-build 在为不兼容的目标编译模块时尝试使用您的 .so 文件。
Android 支持多种 cpu 架构(armeabi、armeabi-v7a、arm64-v8a、x86、x86_64、mips、mips64)。您可以使用 Application.mk 中的 APP_ABI 变量选择要支持的选项。如果将其设置为
all
, ndk-build 将尝试使用您为这些架构中的每一个引用的这个 .so 文件,但这不起作用。您的 .so 文件必须针对 Android 平台进行编译,并且您需要为所支持的每种架构提供不同的版本。您可以动态引用正确的.so文件,例如
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libslabhidtouart.so
因此,在为 armeabi-v7a 编译时,它会在 armeabi-v7a 文件夹下查找您的 .so 文件,在 x86 下为 x86 编译等。当然,您需要提供这些 .so 文件。如果您无法获得所有受支持架构的 .so 文件,则必须限制您的
APP_ABI
。到您拥有的 .so 文件的体系结构。您可以确定您的 .so 文件已编译为使用 readelf 的体系结构。编辑:您的最新评论明确指出您的 .so 文件已针对 x86 编译,但我也怀疑它适用于标准 Linux,而不是 Android。您可以使用 readelf -d 检查您的 lib 依赖项。
关于android - ndk-build .so 不兼容的目标(预建共享库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30053103/