Неопределенная ссылка на AAssetManager fromJava
Я пытаюсь получить доступ к активам из Android apk с помощью AAssetManager. Тем не менее, я продолжаю получать "Неопределенная ссылка на AAssetManager_fromJava", хотя я включил asset_manager.h и asset_manager_jni.ч Другие функции из asset_manager.h, как AAssetManager_openDir (mgr, "") и т. д. Также не могут быть ссылаться.
вот полный код
#define EXPORT_API
#include <string.h>
#include <jni.h>
#include <androidlog.h>
#include <systypes.h>
#include <androidasset_manager.h>
#include <androidasset_manager_jni.h>
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "com.devin - native", __VA_ARGS__)
JNIEnv* env=0;
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* pvt){
LOGD("JNI_OnLoad() called");
vm->AttachCurrentThread(&env, 0);
return JNI_VERSION_1_2;
}
EXPORT_API void LoadAsset(char* filename, jobject assetManager){
AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
/* More stuff */
}
#ifdef __cplusplus
};
#endif
этот код .cpp файл и компилируется с NDK R8. Я делаю что-то ужасно неправильно здесь?
5 ответов
моя ошибка. У меня не было библиотеки" android", добавленной в компоновщик. Я фактически настроил среду NDK dev в Visual Studio Express, и библиотека "android" не была добавлена в мой проект по умолчанию.
Если вы используете makefiles, обязательно добавьте -landroid в LOCAL_LDLIBS при использовании собственного AssetManager.
разработчики Android Studio, Если у вас есть файл ExternalNativeBuild, который называется "CMakeList.txt " вы должны добавить этот код в CMakeList.txt
find_library( # Sets the name of the path variable.
android-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
android )
target_link_libraries(
${log-lib}
${android-lib})
Если у вас также есть родной lib, вы можете добавить легко, как это
target_link_libraries( native-lib
${log-lib}
${android-lib})
то есть он работает великолепно!
find_library (# задает имя переменной path. log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log
android
)
target_link_libraries (# указывает целевую библиотеку. hll андроид ${log-lib}
# Links the target library to the log library
# included in the NDK.
)