2010-06-30 13 views
8

Necesito escribir una biblioteca de enlaces dinámicos en C++ que usa Java en Android. Según me llega, debería ser .so biblioteca, pero no sé cómo hacer eso. Probé Cygwin, pero se bloquea:¿Cómo crear una biblioteca nativa de C++ en Android?

$ gcc 1.cpp

/usr/lib/gcc/i686-pc-cygwin/4.3.4/../../../ ../i686-pc-cygwin/bin/ld: no puede encontrar -luser32 collect2: ld devolvió el código de salida 1

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

¿puede alguien ayudarme con eso?

P.S. No soy bueno en * nix, por lo que debe hacerse mejor en Windows

UPD: He instalado tanto en Android NDK y Cygwin y los añadió a la variable de entorno PATH

UPD2: Gracias por ayudar. El problema fue con Cygwin en sí. Reinstalarlo y NDK resolvió el problema.

Respuesta

0

Mire las muestras que vienen con el NDK. Necesita usar enlaces JNI para permitir que se comunique con Java. Debajo de estos enlaces puede hacer lo que quiera, pero todo lo que necesita ser accesible desde Java debe pasar por los enlaces JNI. Todo lo que NO DEBE ser accesible puede escribirse tal como lo haría normalmente.

Y sí, es perfectamente factible debajo de las ventanas.

1

Probablemente necesitará el Android NDK para compilar y vincular bibliotecas nativas en Android. Cygwin y Windows deberían funcionar (cygwin proporciona las herramientas * nix necesarias).

Para mí, parece que compiló la fuente de C++ para un entorno WINTEL, que es totalmente diferente de los teléfonos Android. Entonces, si carga esa biblioteca en el teléfono, seguramente se bloqueará/no funcionará en absoluto.

Here is an article that might help. Cubre la parte de android-ndk/cygwin y debe proporcionar algunos indicadores para obtener más información.

EDITAR

suspiro - parte imparcial del mensaje de error a Google y se sorprendió de que no hay resultados con la lib user32 ... luego me di cuenta, que la parte -luser32 efectivamente eliminado todo user32 enlaces relacionados de la lista de resultados;)

Este es el enlace más prometedor: http://www.cygwin.com/ml/cygwin/2003-01/msg00292.html

Basiscally - configuración de cygwin correr y añadir el paquete que conta ins en el usuario32 lib. Entonces debería funcionar.

+0

Bueno, he usado JNI con C++ .dll-s en Windows anteriormente, pero tengo algunos problemas para hacer lo mismo con un dispositivo basado en Android. Aquí el código se proporciona solo para mayor claridad, sé cómo escribir bibliotecas JNI :) Parece que mi entorno Cygwin no está configurado correctamente de acuerdo con ese mensaje – UnknownGosu

2

Para su ejemplo, use g ++ en lugar de gcc, es un programa C++.

Mire la muestra de hello-jni en el NDK. Necesita construir su biblioteca compartida utilizando el NDK e importarlo en un proyecto de Java con Android.En el código de Java, debe declarar las funciones nativas con 'nativo' y agregar la biblioteca usando estática; ver el fragmento a continuación.

public native String stringFromJNI(); 

static { 
    System.loadLibrary("hello-jni"); 
} 
Cuestiones relacionadas