2013-08-14 39 views
5

Tôi đã xây dựng một thư viện bằng C++ mà tôi muốn đưa vào ứng dụng Android của mình bằng NDK. Tuy nhiên, thư viện của tôi cần sử dụng ICU4C. Tôi đã cố gắng biên dịch ICU cho Android và tôi đã xem xét rất nhiều câu hỏi ở đây trên SO, nhưng tôi vẫn không thể nhận được ICU được biên dịch thành tệp .a dành cho Android. Tôi không chắc chắn cách tốt nhất để làm điều này. Có ai đã thành công với ICU với NDK không?Bao gồm ICU trong Dự án NDK của Android

Nhân tiện, tôi hy vọng sẽ sử dụng ICU 51.2, trừ khi có lý do chính đáng để sử dụng phiên bản cũ hơn.

Trả lời

2

Bạn có thể xây dựng ICU như thư viện tĩnh Android bằng cách xác định những cờ trong bạn Android.mk

LOCAL_CFLAGS := -DANDROID -fdata-sections -ffunction-sections 
LOCAL_CPPFLAGS := -DANDROID -frtti -fno-exceptions -fdata-sections -ffunction-sections 

Nếu bạn sử dụng Android NDK không ngoại lệ, bạn sẽ cần phải hack mất tích cxa_bad_typeid()

extern "C" std::type_info const& __cxa_bad_typeid() 
{ 
    // just return something 
    return typeid(void*); 
} 
+0

Là ' extern "C" 'để tránh mangling name của' __cxa_bad_typeid'? Nếu vậy, bạn có biết cách giải quyết cảnh báo liên kết không: "__cxa_bad_typeid có liên kết C được chỉ định, nhưng trả về kiểu do người dùng xác định 'const std :: type_info &' không tương thích với C". Tôi có thể vô hiệu hóa cảnh báo, nhưng tôi muốn biết nếu có một cách thích hợp để sửa lỗi này. – meowsqueak

+0

@meowsqueak Bạn có thể sử dụng 'void * __cxa_bad_typeid()' nhưng hack này thậm chí còn tệ hơn và không an toàn. –

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