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

Error in linking C++ static library with android ndk(Error: file format not recognized)

本文关键字:错误 识别 格式 文件 出错 静态 c++ android ndk 链接      更新时间:2023-10-16

我正在尝试在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)

这里是Application.mk文件

APP_STL := stlport_static
APP_CPPFLAGS = -fexceptions  

但是当它尝试使用NDK编译它时,我得到错误

(文件路径)/libUtils。a: file not recognized:文件格式不识别

从评论等来看,听起来您试图使用非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)

但是您应该真正阅读编译链接是如何工作的。我担心用ndk为android构建比使用Xcode或Msvc更低级。