Unterstützt Android schwache Symbole?

Ich habe mir Fragen angesehen wie:

Cannot load library: reloc_library [1285]: 'rand' kann nicht gefunden werdenAndroid App stürzt beim Start ab, weil java.lang.UnsatisfiedLinkError

Es scheint mir, dies könnte mit @ gelöst werdschwache Symbole. Das heißt, eine native Komponente könnte Symbole wie @ bereitstellerand aber schmücke sie mit__attribute__((weak)). Wenn das Symbol in einer anderen Bibliothek wie der Standardlaufzeit gefunden wird, würde das schwach verknüpfte Symbolnich verwendet werden. Wenn andererseits das Symbol fehlt, wird die Version der nativen Komponente verwendet.

Ich habe Probleme beim Auffinden von Informationen für Android (zu viele Nebengeräusche während der Suche).

Ich habe eines meiner Crypto ++ / JNI-Beispielprojekte geöffnet und Folgendes zu einer CPP-Datei hinzugefügt. DasAutoSeededRandomPool ist nur ein Crypto ++ - Zufallszahlengenerator-Objekt (es gibt nichts Besonderes oder Schwieriges).

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

er Versuch, es zu kompilieren, führt zuredefinition of int rand(). Ich habe auch folgendes ausprobiert:

// CPP file

#ifdef __cplusplus
extern "C" {
#endif

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

int random(void)
{
   ...
}

#ifdef __cplusplus
}
#endif

Und bewegenint rand(void) __attribute__((weak)); zur H-Datei erzeugt das gleicheredefinition of int rand().

Und ich erhalte keine Fehler oder Warnungen zu einem unbekannten Attribut.

Ich sehe auch, dass__GXX_WEAK__ ist definiert als1 im Präprozessor, aberSUPPORTS_WEAK istnich definiert, also seine gemischten Signale (vielleicht ein Fehler, ähnlich wieDefinieren GXX_WEAK bis 0 bei Verwendung von -fno-weak).

Ich bin mir nicht sicher, ob ich etwas falsch mache oder etwas wie @ erleconst und schwaches Attribut mit c ++ Code, oder etwas anderes

Unterstützt Android schwache Symbole? Wenn ja, wie benutzt man sie?

Hier eine ähnliche Stapelüberlauf-Frage, auf die es keine Antwort gibt:

Unterschiedliches Verhalten beim Überschreiben schwacher Funktionen in gemeinsam genutzten Bibliotheken zwischen OS X und Android

Einige Systemdetails:

Base-System ist Mac OS X 10.8.5, vollständig gepatchtEclipse 4.4.1 (Luna), vollständig gepatchtAndroid NDK Revision 10dGCC 4.9 Cross-Compiler

Antworten auf die Frage(4)

Ihre Antwort auf die Frage