2012-06-30 29 views
8

我爲Android開發了一些本地庫,並使用Boost庫 - 只是基於標頭的庫。我面臨的問題是,當我嘗試將一些本機庫鏈接到某個系統庫時,引發了UnsatisfiedLinkError。這是由於隨着NDK文檔中所述不同的C++運行時:是否可以在Boost庫中禁用異常和RTTI?

只能選擇一個C++運行時,所有你的代碼將 依賴。不可能混合使用針對不同C++運行時編譯的共享庫。

系統庫不使用RTTI和異常,但我的庫隱式使用它。 我知道有宏BOOST_EXCEPTION_DISABLEBOOST_NO_RTTI,但我無法使其工作。我試圖將它們設置爲編譯器標誌和在config.hpp爲好,但沒有運氣 - 仍然得到許多錯誤,如

cannot use typeid with -fno-rtti 

我怎樣才能加速禁用這些功能,是它甚至可能嗎?

+2

嘗試編譯Boost時你遇到了那個錯誤嗎?或者當試圖編譯自己的代碼? –

+0

當試圖編譯我自己的代碼。 – vitakot

+0

順便說一下,你的問題沒有意義;我寫了我只使用標題...,主要是circular_buffer.hpp,signal.hpp和shared_ptr.hpp – vitakot

回答

5

答案是「也許」。 一些boost庫會在異常禁用的情況下工作 - 有些不會。 與RTTI相同。

我建議你檢查的文檔,你有興趣。

例如,Boost.Array將與殘疾人例外的工作特別Boost庫,但Boost.Format庫不會。

如果您收到類似cannot use typeid with -fno-rtti的消息,那麼編譯需要RTTI的Boost某些部分時可能會出現這種情況。發生錯誤的地方會告訴你哪個庫(通常)。

+0

感謝您的回答!你可能是對的。這個消息與boost信號庫有關,它也使用'boost bind',這意味着使用'boost any',如果沒有啓用rtti,這個功能可能是不可能的。實際上Boost應該根據編譯器設置來設置它自己,所以我相信沒有必要明確定義'BOOST_NO_RTTI'等。 – vitakot