Прекомпиляция статической библиотеки в Android NDK - исходники в отдельном дереве каталогов - PullRequest
1 голос
/ 19 сентября 2011

Я пытаюсь предварительно скомпилировать статическую библиотеку с помощью Android NDK.Эта предварительно скомпилированная статическая библиотека будет позже связана с кодом JNI в других проектах.У меня нет проекта Eclipse, связанного с библиотекой, поэтому я настроил скелетную структуру каталогов Android JNI в корневом каталоге проекта библиотеки.
Структура каталогов следующая:

<root>/
       Android/
               jni/
                   Android.mk
                   Application.mk
       iOS/
           <other stuff here>
       src/
           <a bunch of *.c and *.h files here>

ЭтоApplication.mk file:

APP_PLATFORM := android-8
APP_ABI := armeabi-v7a

И это Android.mk file:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := imajilib
LOCAL_CFLAGS := -DANDROID_NDK
MY_FILES := $(wildcard $(LOCAL_PATH)/../../src/*.c)
LOCAL_SRC_FILES := $(MY_FILES:$(LOCAL_PATH)/%=%)
LOCAL_LDLIBS := -lGLESv2 -llog
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := ignore_this_imajilib
LOCAL_STATIC_LIBRARIES := imajilib
include $(BUILD_SHARED_LIBRARY)

Модуль общей библиотеки ignore_this_imajilib - это трюк зависимостей, который я выбрал из здесь .

Я скомпилирую библиотеку, перейдя в каталог jni/ и выполнив следующую команду:

~/path/to/ndk-build NDK_PROJECT_PATH=/path/to/<root> -B V=1

Компиляция прошла без проблем.Теперь у меня есть новые каталоги libs/ и obj/ в каталоге jni/.

Структура каталога libs/:

libs/
     armeabi-v7a/
                 libignore_this_imajilib.so

Это нормально, но в идеале ятакже хотелось бы видеть libimajilib.a здесь.

Структура каталога obj/:

obj/
    local/
          armeabi-v7a/
                      libignore_this_imajilib.so
                      libimajilib.a
                      objs/
                           imajilib/
                                    <this directory is empty>
                      src/
                          <a bunch of *.o and *.o.d files>

Проблема в расположении *.o и *.o.d файлы.Я подозреваю, что процесс сборки помещает их туда из-за ../../src/*.c, который у меня есть в файле Android.mk, и поэтому он собирается obj/local/armeabi-v7a/objs/imajilib/../../src, тогда как я хотел бы видеть их в obj/local/armeabi-v7a/objs/imajilib.Я не вижу другого способа, кроме как копировать и вставлять исходные файлы из src/ в каталог jni/, но я не хочу этого делать, поскольку каталог src/ используется несколькими платформами.

...