Android поддерживает слабые символы?

Я смотрю на такие вопросы, как:

Невозможно загрузить библиотеку: reloc_library [1285]: не удается найти 'rand'Android-приложение вылетает в начале, потому что java.lang.UnsatisfiedLinkError

Мне кажется, это можно решить с помощьюслабые символы, То есть нативный компонент может предоставлять такие символы, какrand но украсить их__attribute__((weak)), Если символ найден в другой библиотеке, например, во время выполнения, то слабо связанный символне использоваться. С другой стороны, если символ отсутствует, то будет использоваться версия нативного компонента.

У меня проблемы с поиском информации для Android (слишком много посторонних шумов при поиске).

Я открыл один из моих примеров проектов Crypto ++ / JNI и добавил следующее в файл CPP.AutoSeededRandomPool это просто объект генератора случайных чисел Crypto ++ (здесь нет ничего особенного или хитрого).

// CPP file

#ifdef __cplusplus
extern "C" {
#endif

int __attribute__((weak)) rand(void)
{
    int r;

    AutoSeededRandomPool& prng = GetPRNG();
    prng.GenerateBlock(&r, sizeof(r));

    return r;
}

#ifdef __cplusplus
}
#endif

Попытка скомпилировать это приводит кredefinition of int rand(), Я также попробовал следующее:

// CPP file

#ifdef __cplusplus
extern "C" {
#endif

int rand(void) __attribute__((weak));

int random(void)
{
   ...
}

#ifdef __cplusplus
}
#endif

И движетсяint rand(void) __attribute__((weak)); в файл H выдает то же самоеredefinition of int rand().

И я не получаю никаких ошибок или предупреждений о неизвестном атрибуте.

Я также вижу, что__GXX_WEAK__ определяется для1 в препроцессоре, ноSUPPORTS_WEAK являетсяне определены, поэтому его смешанные сигналы (возможно, ошибка, похожая наопределятьGXX_WEAK до 0 при использовании -fno-слабого).

Я не уверен, что делаю что-то не так или испытываю что-то вродеконстантный и слабый атрибут с кодом C ++, или что-то другое.

Android поддерживает слабые символы? Если так, то как их использовать.

Вот аналогичный вопрос переполнения стека, на который нет ответа:

Различное поведение переопределения слабой функции в разделяемой библиотеке между OS X и Android

Некоторые системные детали:

Базовая система - Mac OS X 10.8.5, полностью исправленаЗатмение 4.4.1 (Луна), полностью исправленоAndroid NDK Revision 10dGCC 4.9 кросс-компилятор

Ответы на вопрос(2)

Ваш ответ на вопрос