Удалите функции исключения / отмены из общих объектов Android NDK
Независимо от того, что я пытаюсь, например, добавление флагов компилятора -fno-exceptions -fno-rtti
Я всегда получаю эти функции обработки исключений в моих общих объектах:
Это происходит независимо от того, компилируюсь ли я как C или C++.
Это происходит с этими включениями (скомпилирован как C++ - не пытался скомпилировать как C):
#include <jni.h>
#include <math.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
Вот все мои включения для того, что я скомпилировал как для C, так и для C++ (большинство / все они не нужны для возникновения проблемы):
#include <jni.h>
#ifndef __cplusplus
#include <stdbool.h>
#endif
#include <math.h>
#ifdef __ANDROID__
#include <GLES2/gl2.h>
#else
#error "No graphics implementation for the target platform"
#endif
#ifdef __ANDROID__
#include <SLES/OpenSLES.h>
#include <SLES/OpenSLES_Android.h>
#include <pthread.h>
#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
#else
#error "No audio implementation for the target platform"
#endif
#include <time.h>
typedef struct timespec timespec;
// for malloc, free and memset
#include <stdlib.h>
#include <string.h>
Как я могу избавиться от этих функций обработки исключений раз и навсегда? Цепочка инструментов NDK переопределяет где-нибудь мои флаги компилятора?
1 ответ
Скорее всего, это связано с тем, что вы ссылаетесь на статический C++ STL. Даже если ваш модуль не использует исключения, STL обычно используют (STD NDK не имеют -fno-exceptions
вариант).