2012-06-30 15 views
8

Sviluppo alcune librerie native per Android e utilizzo le librerie Boost, solo quelle basate su intestazioni. Il problema che sto affrontando è che quando provo a collegare alcune delle mie librerie native con alcune librerie di sistema, viene lanciato lo UnsatisfiedLinkError. E 'a causa di diversi tempi di esecuzione C++ come indicato nella documentazione NDK:È possibile disabilitare Eccezioni e RTTI nelle librerie Boost?

È possibile selezionare solo una singola C++ di runtime che tutto il codice sarà dipendere. Non è possibile combinare librerie condivise compilate su diversi runtime in C++.

Le librerie di sistema non utilizzano RTTI ed Eccezioni, ma le mie librerie la utilizzano implicitamente. So che ci sono macro BOOST_EXCEPTION_DISABLE e BOOST_NO_RTTI, ma non sono in grado di farlo funzionare. Ho cercato di impostare loro come flag di compilazione e nella config.hpp pure, ma senza fortuna - ancora ricevendo molti errori come

cannot use typeid with -fno-rtti 

Come è possibile disattivare queste funzionalità in Boost, è anche possibile?

+2

Si è verificato questo errore durante il tentativo di compilare Boost? O quando cerchi di compilare il tuo codice? –

+0

Durante il tentativo di compilare il mio codice. – vitakot

+0

BTW, la tua domanda non ha senso; Ho scritto che uso solo le intestazioni ..., principalmente circular_buffer.hpp, signal.hpp e shared_ptr.hpp – vitakot

risposta

5

La risposta è "forse". Alcune librerie di boost funzionano con eccezioni disattivate, altre no. Uguale per RTTI.

Vi suggerisco di controllare la documentazione per le particolari librerie spinta che si è interessati.

Per esempio, Boost.Array lavorerà con eccezioni per disabili, ma Boost.Format non lo faranno.

Se si ricevono messaggi come cannot use typeid with -fno-rtti, probabilmente durante la compilazione di parte del Boost che richiede RTTI. Dove si verifica l'errore ti dirà quale libreria (di solito).

+0

Grazie per la tua risposta! Probabilmente hai ragione. Questo messaggio è correlato alla libreria di segnali boost, usa anche 'boost bind' che implica l'uso di 'boost any' e questa funzionalità probabilmente non è possibile senza rtti abilitato ... In realtà Boost dovrebbe essere impostato in base alle impostazioni del compilatore, quindi credo non è necessario definire 'BOOST_NO_RTTI' ecc in modo esplicito. – vitakot

Problemi correlati