2012-06-30 25 views
8

Tôi phát triển một số thư viện gốc cho Android và sử dụng thư viện Tăng cường - chỉ các thư viện dựa trên tiêu đề. Vấn đề tôi phải đối mặt là khi tôi cố gắng liên kết một số thư viện bản địa của tôi với một số thư viện hệ thống, UnsatisfiedLinkError bị ném. Đó là do các giai đoạn C++ khác nhau như đã nêu trong tài liệu NDK:Có thể vô hiệu hóa ngoại lệ và RTTI trong thư viện Boost không?

Bạn chỉ có thể chọn một thời gian chạy C++ duy nhất mà tất cả mã của bạn sẽ phụ thuộc vào. Không thể kết hợp các thư viện được chia sẻ được biên dịch với thời gian chạy C++ khác nhau.

Thư viện hệ thống không sử dụng RTTI và ngoại lệ, nhưng thư viện của tôi sử dụng nó hoàn toàn. Tôi biết có các macro BOOST_EXCEPTION_DISABLEBOOST_NO_RTTI, nhưng tôi không thể làm cho nó hoạt động. Tôi cố gắng để thiết lập chúng như cờ biên dịch và trong config.hpp là tốt, nhưng không có may mắn - vẫn nhận được nhiều lỗi như

cannot use typeid with -fno-rtti 

Làm thế nào tôi có thể vô hiệu hóa các tính năng trong Boost, là nó thậm chí có thể?

+2

Bạn có gặp phải lỗi đó khi cố gắng biên dịch Boost không? Hoặc khi cố gắng biên dịch mã của riêng bạn? –

+0

Khi cố gắng biên dịch mã của riêng tôi. – vitakot

+0

BTW, câu hỏi của bạn không có ý nghĩa; Tôi đã viết tôi chỉ sử dụng tiêu đề ..., chủ yếu là circular_buffer.hpp, signal.hpp và shared_ptr.hpp – vitakot

Trả lời

5

Câu trả lời là "có thể". Một số thư viện tăng sẽ hoạt động với các ngoại lệ bị vô hiệu hóa - một số sẽ không. Tương tự đối với RTTI.

tôi đề nghị bạn kiểm tra các tài liệu cho các thư viện tăng cụ thể mà bạn đang quan tâm.

Ví dụ, Boost.Array sẽ làm việc với trường hợp ngoại lệ tàn tật, nhưng Boost.Format sẽ không.

Nếu bạn nhận được các tin nhắn như cannot use typeid with -fno-rtti, có thể sẽ có trong khi biên soạn một số phần của Boost yêu cầu RTTI. Trường hợp lỗi xảy ra sẽ cho bạn biết thư viện nào (thường).

+0

Cảm ơn câu trả lời của bạn! Bạn có lẽ đúng. Thông báo này có liên quan đến thư viện boost signal, nó cũng sử dụng 'boost bind' có nghĩa là sử dụng' boost any' và chức năng này có thể không thực hiện được nếu không bật rtti ... Trên thực tế Boost nên tự thiết lập theo các thiết lập của trình biên dịch, vì vậy tôi tin không nhất thiết phải định nghĩa 'BOOST_NO_RTTI' một cách rõ ràng. – vitakot

Các vấn đề liên quan