2012-06-30 15 views
8

Rozwijam niektóre biblioteki natywne dla Androida i korzystam z bibliotek Boost - tylko te oparte na nagłówkach. Problem, z którym się borykam, polega na tym, że gdy próbuję połączyć niektóre z moich bibliotek macierzystych z pewną biblioteką systemową, zostanie zgłoszony UnsatisfiedLinkError. Wynika to z różnych środowisk wykonawczych C++ jak wskazano w dokumentacji NDK:Czy można wyłączyć wyjątki i RTTI w bibliotekach Boost?

Można wybrać tylko jeden C++ runtime, że cały kod będzie polegać. Nie można mieszać bibliotek współdzielonych skompilowanych z różnymi środowiskami wykonawczymi C++ w stosunku do .

Biblioteki systemowe nie korzystają z RTTI i wyjątków, ale moje biblioteki używają tego niejawnie. Wiem, że istnieją makra BOOST_EXCEPTION_DISABLE i BOOST_NO_RTTI, ale nie jestem w stanie sprawić, żeby działało. Próbowałem ustawić je jako flagi kompilatora iw config.hpp jak również, ale bez powodzenia - wciąż się wiele błędów jak

cannot use typeid with -fno-rtti 

Jak mogę wyłączyć te funkcje w Boost jest to w ogóle możliwe?

+2

Czy pojawił się ten błąd podczas próby kompilacji wzmocnienia? Lub kiedy próbujesz skompilować swój własny kod? –

+0

Podczas próby skompilowania mojego własnego kodu. – vitakot

+0

BTW, twoje pytanie nie ma sensu; Pisałem używam tylko nagłówki ..., głównie circular_buffer.hpp, signal.hpp i shared_ptr.hpp – vitakot

Odpowiedz

5

Odpowiedzią jest "może". Niektóre biblioteki wspomagające działają z wyłączonymi wyjątkami - niektóre nie. To samo dla RTTI.

Proponuję sprawdzić dokumentację dla poszczególnych bibliotek Boost, że jesteś zainteresowany.

Na przykład Boost.Array będzie pracować z wyjątkami niepełnosprawnych, ale Boost.Format nie będzie.

Jeśli otrzymujesz wiadomości jak cannot use typeid with -fno-rtti, że będzie prawdopodobnie podczas kompilacji jakąś część Boost, która wymaga RTTI. Tam, gdzie wystąpi błąd, dowiesz się, która biblioteka (zwykle).

+0

Dzięki za odpowiedź! Prawdopodobnie masz rację. Ta wiadomość jest związana z biblioteką sygnałów doładowania, używa też 'boost bind ', co oznacza użycie' boost any' i ta funkcja prawdopodobnie nie jest możliwa bez włączonego rtti ... Właściwie Boost powinien ustawić się zgodnie z ustawieniami kompilatorów, więc wierzę nie jest konieczne jawne definiowanie "BOOST_NO_RTTI" itd. – vitakot

Powiązane problemy