2011-11-29 30 views
0

我想包括靜態cpp庫在android中。這個庫已經編譯(在mac os),我有它的包含文件。鏈接C + +靜態庫與android ndk錯誤(錯誤:文件格式不被識別)

這裏是我的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:文件無法識別:文件格式無法識別 collect2:ld返回1個出口狀態

+0

你能提供'file libUtils.a'的輸出嗎? – plaisthos

+0

對不起,但我不能讓你?輸出? –

+0

你的圖書館是爲android編譯的嗎?如果庫包含另一種類型的處理器(指令集)的代碼,它將不起作用! –

回答

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) 

但是你應該認真閱讀編譯如何鏈接的作品。恐怕用ndk構建android比使用Xcode或Msvc更低。

+0

+1老兄爲解釋。讓我看看文件。然後嘗試編譯它。 –