2010-06-30 20 views
8

Ho bisogno di scrivere una libreria di collegamento dinamico in C++ che viene utilizzata da Java su Android. Come ottengo, dovrebbe essere la libreria .so, ma non so come farlo. Ho provato Cygwin, ma si blocca:Come creare una libreria C++ nativa su Android?

$ gcc 1.cpp

/usr/lib/gcc/i686-pc-cygwin/4.3.4/../../../ ../i686-pc-cygwin/bin/ld: non riesce a trovare -luser32 collect2: ld restituito stato 1 uscita

1.cpp: 
int main(int, char**) 
{ 
    return 0; 
} 

qualcuno mi può aiutare con questo?

P.S. io non sono bravo a * nix, quindi dovrebbe essere meglio fatto in ambiente Windows

UPD: Ho installato sia Android NDK e Cygwin e aggiunto alla variabile d'ambiente PATH

UPD2: Grazie dell'aiuto. Il problema era con Cygwin stesso. La reinstallazione e NDK hanno risolto il problema.

risposta

0

Guarda i campioni forniti con NDK. È necessario utilizzare i collegamenti JNI per consentirgli di comunicare con Java. Sotto questi binding puoi fare quello che vuoi, ma tutto ciò che deve essere accessibile da Java deve passare attraverso i binding JNI. Tutto ciò che NON DEVE essere accessibile può essere scritto proprio come faresti normalmente.

E sì è perfettamente fattibile sotto Windows.

1

Probabilmente avrete bisogno di Android NDK per compilare e collegare librerie native su Android. Cygwin e Windows dovrebbero funzionare (cygwin fornisce gli strumenti necessari * nix).

Per me sembra che tu abbia compilato il sorgente C++ per un ambiente WINTEL, che è totalmente diverso dai telefoni Android. Quindi, se si carica quella libreria sul telefono, si bloccherà sicuramente/non funzionerà affatto.

Here is an article that might help. Copre la parte android-ndk/cygwin e dovrebbe fornire alcuni indicatori per ulteriori informazioni.

EDIT

sospiro - parte mano del messaggio di errore a Google e sono rimasto sorpreso che non ci sono risultati con la lib user32 ... poi ho capito, che la parte -luser32 efficacemente rimosso tutto user32 link correlati dalla lista dei risultati;)

Questo è il link più promettente: http://www.cygwin.com/ml/cygwin/2003-01/msg00292.html

Basiscally - configurazione cygwin correre e aggiungere il pacchetto che conta nella libreria user32 lib. Quindi dovrebbe funzionare.

+0

Bene, ho usato JNI con C++ .dll-s in Windows, ma ho alcuni problemi a fare lo stesso con il dispositivo basato su Android. Il codice qui è fornito solo per chiarezza, so come scrivere librerie JNI :) Sembra che il mio ambiente Cygwin non sia configurato correttamente secondo quel messaggio – UnknownGosu

2

Per l'esempio, utilizzare g ++ anziché gcc, è un programma C++.

Guarda l'esempio ciao-jni nel NDK. È necessario creare la libreria condivisa utilizzando NDK e importarla in un progetto Java Android.Nel codice Java, è necessario dichiarare le funzioni native con "native" e aggiungere la libreria usando static; vedere lo snippet qui sotto.

public native String stringFromJNI(); 

static { 
    System.loadLibrary("hello-jni"); 
} 
Problemi correlati