2016-03-08 4 views
1

считать создание собственной библиотеки (назовем ее testLib), содержащей два класса JNITestLib.h и JNITestLib.cpp. Эта библиотека использует другую разделяемую библиотеку разработки кем-то другим (давайте назовем его libotherLib.so), содержащий два класса, называемые OtherLib.cpp и OtherLib.hНеустранимая ошибка: Класс: Нет такого файла или каталога

Ниже мои файлы

Android.mk:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := otherLib-prebuilt 
LOCAL_SRC_FILES := $(LOCAL_PATH)/library/libotherLib.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := testLib 

LOCAL_SHARED_LIBRARIES := otherLib-prebuilt 

LOCAL_SRC_FILES += com_example_JNITestLib.cpp 

LOCAL_LDLIBS := -llog 
include $(BUILD_SHARED_LIBRARY) 

JNITestLib.cpp:

#include "com_example_JNITestLib.h"  
#define LOG_TAG "Test" 

JNIEXPORT void Java_com_example_JNITestLib_startTest 
(JNIEnv *env, jobject) 
{ 
    ALOGD("startTest JNI");  
} 

JNITestLib.h:

#include <jni.h> 
#include "Debug.h" 
#include "OtherLib.h" //Problem here!!!! 

JNIEXPORT void Java_com_example_JNITestLib_startTest 
(JNIEnv *env, jobject); 

Моя проблема в том, я получаю следующее сообщение об ошибке после выполнения: NDK-сборки -C [project_path]/приложение/SRC/главная/JNI /:

fatal error: OtherLib: No such file or directory 
#include OtherLib.h 
     ^

Я также попытался изменить свой файл Android.mk как:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := testLib 

LOCAL_SRC_FILES += com_example_JNITestLib.cpp 

LOCAL_LDLIBS := -llog 
LOCAL_LDLIBS += -l$(LOCAL_PATH)/library/libotherLib.so 
include $(BUILD_SHARED_LIBRARY) 

Но получить:

This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the current module 

Обратите внимание, я не могу получить OtherLib.h, потому что он входит в libotherLib.so

Есть ли у кого-нибудь идеи решить мою проблему, пожалуйста?

ответ

1

Вам нужны файлы заголовков для libotherLib.so, если вы хотите включить их в свой код на C++. После того, как у вас есть файлы заголовков, вы должны добавить строку в Android.mk, которая сообщает компилятору, где искать:

include $(CLEAR_VARS) 
LOCAL_MODULE := testLib 

LOCAL_SHARED_LIBRARIES := otherLib-prebuilt 

LOCAL_SRC_FILES += com_example_JNITestLib.cpp 
LOCAL_C_INCLUDES := <path to a directory containing the headers> 

LOCAL_LDLIBS := -llog 
include $(BUILD_SHARED_LIBRARY) 
+0

Дело в том, что у меня нет файла заголовка. Этот родной lib является третьей либой, разделяемой другим человеком. – suns9

+0

Возможно использование общей библиотеки без соответствующих заголовков, но не рекомендуется. Я хотел бы попросить этого человека отправить вам файлы заголовков. –

Смежные вопросы