The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Вышел CrystaX NDK 10.1.0, инструментарий для разработки Andr..."
Отправлено crystax, 02-Фев-15 01:20 
>[оверквотинг удален]
> забыть."
> Но вообще-то, это совсем не так. Стандартный NDK содержит не 2, а
> 4 реализации STL ( http://www.kandroid.org/ndk/docs/CPLUSPLUS-SUPPORT.html ):
> - system - та самая обрезаная версия "без всего", которую Вы ошибочно
> называете GNU libstdc++
> - gabi++
> - stlport
> - gnustl - собственно GNU libstdc++ с полной поддержкой std::thread, std::mutex, std::chrono,
> и всего остального, что входит в C++11 - при условии выбора
> соответсвующего toolchain (например, gcc 4.8 или 4.9).

Это ошибочное представление. "Версии" system/gabi++/stlport я во внимание не принимаю, т.к. system и gabi++ - это вообще даже рядом не "стандартная библиотека C++", а stlport сильно устарела и C++11 возможностей в ней просто нет.

Так что я говорил о gnustl (GNU libstdc++ - $NDK/sources/cxx-stl/gnu-libstdc++) и libc++ (LLVM libc++ - $NDK/sources/cxx-stl/llvm-libc++). Они обе вполне реализуют то, что требует стандарт C++11 от стандартной библиотеки. Проблема только в том, что конкретно в NDK реализация GNU libstdc++ неполная, а LLVM libc++ - нестабильная.

Что касается std::mutex и std::thread - то да, они действительно теперь доступны в Google NDK при использовании GNU libstdc++ (gnustl), однако еще совсем недавно они не были доступны. Причины этого - бедная и не соответствующая стандартам libc (Bionic). При сборке GNU libstdc++ запускает много тестов, чтобы проверить, реализована ли на target-системе определенная функциональность и, если нет, отключает все от нее зависящие фичи. Ранее std::thread и std::mutex не работали из-за того, что Bionic не предоставляла pthread_mutex_timedlock(). Сейчас это поправлено, но много других вещей остались неисправленными и далее. Предлагаю открыть файл $NDK/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/c++config.h и оценить, сколько макросов там не определено, а затем самостоятельно поискать в $NDK/sources/cxx-stl/gnu-libstdc++/4.9/include, что от этих макросов зависит. Например, std::stol.

LLVM libc++ реализована по другому, поэтому для ее сборки в Google пришлось ее очень сильно покромсать, что плачевно сказалось на ее стабильности. Иными словами, при ее использовании регулярные падения вам обеспечены.

Мы же в CrystaX NDK исправили очень много низкоуровневых вещей, из-за чего стало возможным а) собрать полноценную GNU libstdc++, в которой все фичи включены и б) собрать LLVM libc++ из upstream исходников, а не покромсанную Google-ом.

> Так что C++11 доступен в NDK достаточно давно.

Как видите, это не так. В Google NDK C++11 как язык доступен, но со стандартной библиотекой беда.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру