¿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.

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.

3 Solutions collect form web for “¿Cómo implementar mbtowc para android? (O, idealmente, ¿cómo no hacerlo?)”

 #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.

  • La salida de gdb remota de Android es dolorosamente lenta
  • Compatible con la biblioteca de redes C y Java
  • Android Studio - No hay opción para vincular C ++ a Gradle
  • Integrar MuPDF como un proyecto de biblioteca (Android)
  • Uso de vainilla GCC (o Clang) con android NDK
  • ¿Hay alguna biblioteca de edición de video disponible en Android
  • Eliminar moldes de estilo C en código C ++ bajo Android
  • Android: Necesidad de crear un objeto Preferencias compartidas en c ++ NDK y almacenar algún valor booleano
  • Cómo compilar el proyecto Qt 5.2 simple en C4Droid
  • Android NDK clang compilador no puede encontrar std :: make_unique
  • Creación de una arquitectura cliente-servidor con estado en WCF
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.