Ich muss eine dynamische Link-Bibliothek in C ++ schreiben, die von Java auf Android verwendet wird. Wie ich komme, sollte es .so Bibliothek sein, aber ich weiß nicht, wie das geht. Ich habe versucht, Cygwin, aber es stürzt ab:
%Vor%$ gcc 1.cpp
/usr/lib/gcc/i686-pc-cygwin/4.3.4 /../../../../ i686-pc-cygwin / bin / ld: kann -luser32 nicht finden collect2: ld gab 1 Exit-Status zurück
Kann mir jemand dabei helfen?
P.S. Ich bin nicht gut in * nix, also sollte es besser unter Windows
gemacht werdenUPD: Ich habe sowohl Android NDK als auch Cygwin installiert und sie der Umgebungsvariablen PATH hinzugefügt
UPD2 : Danke für Ihre Hilfe. Das Problem war mit Cygwin selbst. Neuinstallation und NDK lösten das Problem.
Verwenden Sie für Ihr Beispiel g ++ anstelle von gcc, ein C ++ - Programm.
Sehen Sie sich das Hallo-jni-Beispiel im NDK an. Sie müssen Ihre gemeinsam genutzte Bibliothek mit dem NDK erstellen und sie in ein Java-Android-Projekt importieren. Im Java-Code müssen Sie die nativen Funktionen mit 'nativ' deklarieren und die Bibliothek mit statisch hinzufügen; siehe Schnipsel unten.
%Vor%Sie benötigen wahrscheinlich das Android NDK, um native Bibliotheken auf Android zu kompilieren und zu verknüpfen. Cygwin und Windows sollten funktionieren (Cygwin stellt die benötigten * nix-Tools zur Verfügung).
Für mich sieht es so aus, als hätten Sie die C ++ - Quelle für eine WINTEL-Umgebung kompiliert, die sich von Android-Handys völlig unterscheidet. Also, wenn Sie diese Bibliothek auf das Telefon laden, wird es sicherlich abstürzen / überhaupt nicht funktionieren.
Hier ist ein Artikel, der helfen könnte . Es deckt den android-ndk / cygwin Teil ab und sollte einige Hinweise zu mehr Information geben.
BEARBEITEN
seufzen - Teil der Fehlermeldung an Google übergeben und war überrascht, dass es keine Ergebnisse mit der user32 lib gibt ... dann erkannte ich, dass der Teil -luser32
effektiv alle% co_de entfernt hat % verwandte Links von der Ergebnisliste;)
Dies ist der vielversprechendste Link: Ссылка
Basisch - führen Sie das cygwin-Setup aus und fügen Sie das Paket hinzu, das die lib user32 enthält. Dann sollte es funktionieren.
Sehen Sie sich die Beispiele an, die mit dem NDK geliefert werden. Sie müssen JNI-Bindungen verwenden, um die Kommunikation mit Java zu ermöglichen. Unter diesen Bindungen können Sie tun, was Sie wollen, aber alles, was von Java aus zugänglich sein muss, muss die JNI-Bindungen durchlaufen. Alles, was NICHT zugänglich sein muss, kann genauso geschrieben werden, wie Sie es normalerweise tun würden.
Und ja, es ist perfekt unter Windows machbar.
Tags und Links java android c++ jni nativelibrary