将C++静态库与android ndk链接时出错(错误:无法识别文件格式)

N-J*_*JOY 0 c++ java-native-interface android android-ndk

我试图在android中包含静态cpp库.这个库已经编译(在mac os上),我有它的包含文件.

这是我的Android.mk档案

LOCAL_PATH := $(call my-dir)
 include $(call all-subdir-makefiles)
    include $(CLEAR_VARS) 
    LOCAL_MODULE:= utils 
    LOCAL_SRC_FILES:= libUtils.a 
    LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/utils 
    include $(PREBUILT_STATIC_LIBRARY) 

    include $(CLEAR_VARS) 
    LOCAL_MODULE := sample 
    LOCAL_SRC_FILES := sample_cpp.cpp 
    LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) 
    LOCAL_STATIC_LIBRARIES :=  utils
    LOCAL_LDLIBS    := -llog 
    include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

这是Application.mk文件

APP_STL := stlport_static
APP_CPPFLAGS = -fexceptions  
Run Code Online (Sandbox Code Playgroud)

但每当它尝试使用NDK编译它我得到错误

(文件路径)/libUtils.a:文件无法识别:文件格式无法识别collect2:ld返回1退出状态

pla*_*hos 5

从评论等等听起来就像你试图使用库的非arm版本.您应该使用ndk构建库.该文档甚至包含有关如何执行此操作的文档.

例如,构建sigc ++可能就像(来自我的项目,其中sigc ++位于sigc ++子目录中)

# SIGC++ Library built as static library
LOCAL_MODULE := sigc
LOCAL_PATH = $(CURRENT_DIR)
LOCAL_CPP_EXTENSION := .cc

LOCAL_SRC_FILES :=    sigc++/signal.cc       sigc++/signal_base.cc  sigc++/trackable.cc 
LOCAL_SRC_FILES +=    sigc++/functors/slot_base.cc  sigc++/adaptors/lambda/lambda.cc 
LOCAL_SRC_FILES += sigc++/connection.cc sigc++/functors/slot.cc

LOCAL_C_INCLUDES := sigc++

include $(BUILD_STATIC_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

但您应该真正了解编译链接的工作原理.我担心使用ndk构建android比使用Xcode或Msvc更低级别.