¿Cómo implementar mbtowc para android? (O, idealmente, ¿cómo no hacerlo?)
Estoy intentando construir una aplicación de Android que hace uso de la serialización de impulso. He construido la biblioteca contra NDK r8d usando el brazo 4.7 g ++. Cuando voy a compilar mi código nativo en una biblioteca usando ndk-build, sin embargo, obtengo "referencia indefinida a 'mbtowc'" y "referencia indefinida a 'wctomb'" cuando el compilador intenta vincular algún código de encabezados de archivo en boost .
Parece que no puedo obtener una respuesta clara sobre si el NDK soporta estas funciones.
- ¿Podemos acceder al controlador de micrófono de mi teléfono Android
- Se produjo un error al agregar a la tabla ref de matrices JNI fijada (1024 entradas)
- Creación de aplicaciones NDK con Android ADT en Windows
- Uso de la STL con Android NDK C ++
- OpenCV Android - No se puede resolver la función JNI correspondiente
Aunque implementa las funciones, el CrystaX NDK no es una opción, ya que ha conocido fallos al utilizarlo con Boost, de acuerdo con la lista de correo de Boost.
Por lo tanto, si el NDK no implementar estas funciones de alguna manera, ¿por qué NDK-build no puede vincular contra ellos? Puedo encontrar una referencia a ellos en cstdlib dentro de la NDK, y creo que puede haber una bandera que tengo que establecer, pero no estoy seguro de cómo o dónde hacerlo.
Si no hay implementación de ellos, ¿alguien tiene algún consejo sobre cómo puedo escribir ellos mismo? Sé más o menos lo que mbtowc y su complemento se supone que hacer, pero sin mucha experiencia escribiendo bajo nivel C, y sin mucho conocimiento de la arquitectura de Android / ARM, realmente podría utilizar algunos consejos sobre hacerlo.
- Acceda a la cámara a través de OpenMAX en Android
- Migrar un programa C a Android NDK
- ¿Cómo importar correctamente una biblioteca de Android con código JNI?
- Cifrado entre Android y C #
- Aprendiendo C / C ++ y Java
- Comparación entre QAbstractButton y QPushButton * carece de un molde
- Lista y nombres de los gestos con pantalla táctil
- Cómo obtener MJPG stream video de android IPWebcam using opencv
#ifdef ANDROID int wctomb(char *s, wchar_t wc) { return wcrtomb(s,wc,NULL); } int mbtowc(wchar_t *pwc, const char *s, size_t n) { return mbrtowc(pwc, s, n, NULL); } #endif
¡Recomendaciones! Sí, boost tiene opciones para construirlo sin necesidad de soporte wchar añadiendo definiciones de preprocesador a los scripts de creación de impulso. Boost todavía se bloquea cuando se construye utilizando ellos en la línea de código donde intento serializar un objeto a archivo. (El bloqueo es un genérico segfault en 0x00000000, y no pude obtener ninguna información útil).
Por lo tanto, no me he molestado en escribir wctomb o su inversa. No debería necesitar, es la respuesta a mi pregunta, aunque al final la respuesta a la pregunta no importa.
Para aclarar más: no se moleste en hacer lo que he estado tratando de hacer. Si ha estado utilizando la biblioteca de serialización de Boost y desea que su código se ejecute en android ndk r8d o anterior, simplemente abandone. Escriba un serializador usted mismo, porque no hay información útil que se encuentra en cómo hacer Serialization trabajo. Esperemos que un futuro lanzamiento de la ndk corrige este problema, pero por ahora no tengo más remedio que reescribir todo.
Yo tuve el mismo problema. Estaba creando un puerto androide para el código que utiliza boost :: serialization.
Mi código falló al compilar debido a falta de implementación de mbtowc
/ wctomb
(mb: multi-byte (char), wc: (wide-char) '
La implementación de estas funciones probablemente será una causa difícil, por lo que sé que el ancho-char para android es un solo byte char en lugar de un verdadero carácter ancho.
Sin embargo, cuando compilé impulso con -DBOOST_NO_STD_WSTRING
los errores de enlace desaparecieron y podría utilizar boost::archive::text_iarchive
& boost::archive::text_oarchive
en android.
Ahora estoy serializando contenedores STL de numerics y std :: strings sin problema.
He compilado el impulso para Android siguiendo el consejo en este enlace: http://www.codexperiments.com/android/2011/05/tips-tricks-building-boost-with-ndk-r5/
Estoy usando boost-1.55_0 y NDK r9c.
<compileflags>-DBOOST_NO_STD_WSTRING
el siguiente <compileflags>-DBOOST_NO_STD_WSTRING
al comando build para construir una biblioteca de serialización sin soporte de caracteres amplios.
- ¿Por qué la decodificación de mapa de bits con inBitmap siempre recibe java.lang.IllegalArgumentException: Decodificación de P ro blem en bitmap existente
- Cómo cambiar la imagen FAB predeterminada en la actividad de desplazamiento