2013-03-20 32 views

Trả lời

2

Kể từ hôm qua (NDK r9d), gnustl vẫn toàn diện hơn, ví dụ: hỗ trợ cho < chủ đề>, < tương lai> và một số tính năng C++ 11 khác. Ngay cả những phụ thuộc vào toolchain: bạn không thể sử dụng mặc định ARM gcc 4.6 để chúng được kích hoạt.

OTOH, giấy phép stlport không có gì vô nghĩa, như phần còn lại của AOSP, trong khi ngoại lệ liên kết với GPL v3 cho gnustl không dễ hiểu. Xem https://groups.google.com/d/topic/android-ndk/OWl_orR0DRQ để biết một số cuộc thảo luận cũ hơn.

Nếu bạn nhìn vào ghi chú phát hành NDK, bạn sẽ thấy rằng về mặt lỗi cố định, hai triển khai STL này nhiều hơn hoặc ít hơn ngang hàng.

Tôi rất vui khi thấy điểm chuẩn hiệu suất, nhưng cá nhân tôi chưa bao giờ gặp phải tình huống mà biến thể triển khai STL giải quyết một nút cổ chai thực sự.

0

GNU STL được phân phối theo giấy phép GPLv3 không được chấp nhận đối với một số người. NDK cũng cung cấp STLport và có thể sử dụng nó thay vào đó, nhưng nó phức tạp hơn một chút vì chuỗi công cụ độc lập không bao gồm nó.

Theo chuỗi công cụ NDK mặc định sẽ liên kết thư viện chia sẻ C++ của bạn với phiên bản tĩnh của GNU STL lib. Tuy nhiên nếu bạn đang sử dụng một số lib được chia sẻ thì không thể chấp nhận để liên kết với phiên bản tĩnh của STL vì mỗi lib được chia sẻ của bạn sẽ có bản sao STL riêng. Điều này sẽ dẫn đến một số bản sao của các vars toàn cầu được xác định trong STL và có thể dẫn đến rò rỉ bộ nhớ hoặc tham nhũng

IMPORTANT: Sử dụng chuỗi công cụ NDK trực tiếp có giới hạn nghiêm trọng: Bạn sẽ không thể sử dụng bất kỳ C++ STL (STLport hoặc GNU libstdC++) với nó. Cũng không có ngoại lệ và không có RTTI.

+0

NDK r9d, docs/STANDALONE_TOOLCHAIN.html: Bạn có thể chỉ định --stl = stlport để sao chép libstlport thay vì libgnustl. Lưu ý rằng để liên kết với thư viện được chia sẻ, bạn sẽ phải sử dụng rõ ràng -lstlport_shared trong trường hợp này, giống như bạn cần sử dụng -lgnustl_shared cho trường hợp libstdC++ của GNU. –

+1

Ngoài ra, gnu-stl chỉ định một expemtion cho GPL v3, cho phép trong thực tế cho ứng dụng mã đóng để sử dụng nó như là liên kết chia sẻ hoặc thậm chí tĩnh, miễn là mã thư viện không thay đổi. –

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