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构建编译给出错误
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的库,感谢你们,你们让我清楚
答案 0 :(得分:5)
此参考:
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文件。您可以为正确的.so文件提供动态引用,例如LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libslabhidtouart.so
,以便在编译armeabi-v7a时在armeabi-v7a文件夹下查找.so文件,在x86下搜索x86等等。
当然你需要提供这些.so文件。如果您无法获得所有受支持体系结构的.so文件,则必须将APP_ABI
限制为您拥有的.so文件的体系结构。您可以使用readelf确定已编译.so文件的体系结构。
编辑:您的最新评论确切地说您的.so文件是针对x86编译的,但我也怀疑它是针对标准Linux,而不是Android。您可以使用readelf -d检查lib依赖项。
答案 1 :(得分:0)
预构建的库应该使用相应的NDK standlone工具链构建,例如“arm-linux-androideabi-4.9”,“x86-4.9”......
你可以在文件夹/ toochains /
中找到它们答案 2 :(得分:-2)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := slabhidtouart
LOCAL_SRC_FILES := libslabhidtouart.so
include $(PREBUILT_SHARED_LIBRARY)
使用ndk构建进行编译会给出错误:
testjni1 // obj / local / armebai / libslabhidtouart.so:目标不兼容
chmod a+x solve it