Ошибка при связывании статической библиотеки C ++ с android ndk (Ошибка: формат файла не распознан) - PullRequest
0 голосов
/ 29 ноября 2011

Я пытаюсь включить статическую библиотеку cpp в Android. Эта библиотека уже скомпилирована ( на 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: файл не распознан: формат файла не распознан collect2: ld вернул 1 статус выхода

1 Ответ

5 голосов
/ 29 ноября 2011

Из комментариев и так далее звучит так, будто вы пытаетесь использовать неруковую версию библиотеки.Вы должны собрать библиотеку с помощью 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)

Но вы действительно должны прочитать, как работает компиляция ссылок.Я боюсь, что сборка для Android с ndk более низкого уровня, чем с использованием Xcode или Msvc.

...