Wie erstelle ich eine native C ++ Bibliothek auf Android?

8

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:

  

$ 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

%Vor%

Kann mir jemand dabei helfen?

P.S. Ich bin nicht gut in * nix, also sollte es besser unter Windows

gemacht werden

UPD: 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.

    
UnknownGosu 30.06.2010, 07:56
quelle

3 Antworten

2

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%     
Max 08.07.2010 21:18
quelle
1

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.

    
Andreas_D 30.06.2010 08:37
quelle
0

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.

    
Goz 30.06.2010 08:37
quelle

Tags und Links