2012-06-30 15 views
8

Desarrollo algunas bibliotecas nativas para Android y uso las bibliotecas de Boost, solo las basadas en encabezados. El problema al que me enfrento es que cuando intento vincular algunas de mis bibliotecas nativas con alguna biblioteca del sistema, se lanza el UnsatisfiedLinkError. Es debido a diferentes tiempos de ejecución de C++ como se indica en la documentación NDK:¿Es posible deshabilitar Excepciones y RTTI en las bibliotecas Boost?

Sólo se puede seleccionar un solo tiempo de ejecución de C++ que todo el código se depender. No es posible mezclar bibliotecas compiladas compiladas contra diferentes tiempos de ejecución de C++.

Las bibliotecas del sistema no usan RTTI y Excepciones, pero mis bibliotecas lo usan implícitamente. Sé que hay macros BOOST_EXCEPTION_DISABLE y BOOST_NO_RTTI, pero no puedo hacerlo funcionar. He intentado establecer como opciones del compilador y en el config.hpp también, pero sin suerte - que sigue recibiendo muchos errores como

cannot use typeid with -fno-rtti 

¿Cómo puedo desactivar estas funciones en Boost, ¿es posible?

+2

¿Recibió ese error al intentar compilar Boost? ¿O cuando intentas compilar tu propio código? –

+0

Al intentar compilar mi propio código. – vitakot

+0

Por cierto, su pregunta no tiene sentido; Escribí Yo uso solo encabezados ..., principalmente circular_buffer.hpp, signal.hpp y shared_ptr.hpp – vitakot

Respuesta

5

La respuesta es "tal vez". Algunas bibliotecas de refuerzo funcionarán con excepciones desactivadas; otras no. Lo mismo para RTTI.

le sugiero que consulte la documentación de las bibliotecas Boost particulares que le interesan.

Por ejemplo, Boost.Array trabajará con discapacidad excepciones, pero Boost.Format no lo hará.

Si recibe mensajes como cannot use typeid with -fno-rtti, eso probablemente será mientras compila alguna parte de Boost que requiera RTTI. Donde se produce el error le dirá qué biblioteca (generalmente).

+0

¡Gracias por tu respuesta! Probablemente tengas razón. Este mensaje está relacionado con la biblioteca de señales boost, también usa 'boost bind', que implica el uso de' boost any' y esta funcionalidad probablemente no sea posible sin rtti enabled ... En realidad, Boost debería establecerse de acuerdo con la configuración del compilador, así que creo no es necesario definir 'BOOST_NO_RTTI' etc. explícitamente. – vitakot

Cuestiones relacionadas