¿Android admite símbolos débiles?

He estado mirando preguntas como:

No se puede cargar la biblioteca: reloc_library [1285]: no se puede encontrar 'rand'La aplicación de Android se bloquea al principio porque java.lang.UnsatisfiedLinkError

Me parece que esto podría resolverse consímbolos débiles. Es decir, un componente nativo podría proporcionar símbolos comorand pero adornarlos con__attribute__((weak)). Si el símbolo se encuentra en otra biblioteca, como el tiempo de ejecución estándar, entonces el símbolo débilmente vinculadono ser usado. Por otro lado, si faltaba el símbolo, se usaría la versión del componente nativo.

Tengo problemas para localizar información sobre él para Android (demasiado ruido no relacionado mientras busco).

Abrí uno de mis proyectos de muestra Crypto ++ / JNI y agregué lo siguiente a un archivo CPP. losAutoSeededRandomPool es solo un objeto generador de números aleatorios Crypto ++ (no hay nada especial o complicado a continuación).

// 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

Intentar compilarlo da como resultadoredefinition of int rand(). También probé lo siguiente:

// CPP file

#ifdef __cplusplus
extern "C" {
#endif

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

int random(void)
{
   ...
}

#ifdef __cplusplus
}
#endif

Y en movimientoint rand(void) __attribute__((weak)); al archivo H produce lo mismoredefinition of int rand().

Y no recibo ningún error o advertencia sobre un atributo desconocido.

También veo que__GXX_WEAK__ se define para1 en el preprocesador, peroSUPPORTS_WEAK esno definido, por lo que sus señales mixtas (tal vez un error, similar aDefinirGXX_WEAK a 0 cuando se utiliza -fno-débil)

No estoy seguro si estoy haciendo algo mal o si estoy experimentando algo comoatributo constante y débil con código c ++, o algo mas.

¿Android admite símbolos débiles? Si es así, ¿cómo se usan?

Aquí una pregunta similar de desbordamiento de pila que no tiene una respuesta:

Diferente comportamiento de anular la función débil en la biblioteca compartida entre OS X y Android

Algunos detalles del sistema:

El sistema base es Mac OS X 10.8.5, completamente parcheadoEclipse 4.4.1 (Luna), completamente parcheadoRevisión de Android NDK 10dCompilador cruzado GCC 4.9

Respuestas a la pregunta(2)

Su respuesta a la pregunta