- Вышел CrystaX NDK 10.1.0, инструментарий для разработки Andr..., Аноним, 09:53 , 23-Янв-15 (1) +5
- Вышел CrystaX NDK 10.1.0, инструментарий для разработки Andr..., Аноним, 11:35 , 23-Янв-15 (3) –1
- Вышел CrystaX NDK 10.1.0, инструментарий для разработки Andr..., Аноним, 11:42 , 23-Янв-15 (4) +1
- Вышел CrystaX NDK 10.1.0, инструментарий для разработки Andr..., Аноним, 06:28 , 25-Янв-15 (9)
- Вышел CrystaX NDK 10.1.0, инструментарий для разработки Andr..., Ne01eX, 11:40 , 26-Янв-15 (11)
- Вышел CrystaX NDK 10.1.0, инструментарий для разработки Andr..., Аноним, 01:03 , 02-Фев-15 (14)
- Вышел CrystaX NDK 10.1.0, инструментарий для разработки Andr..., crystax, 01:20 , 02-Фев-15 (15)
>[оверквотинг удален] > забыть." > Но вообще-то, это совсем не так. Стандартный 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 как язык доступен, но со стандартной библиотекой беда.
- Вышел CrystaX NDK 10.1.0, инструментарий для разработки Andr..., crystax, 01:33 , 02-Фев-15 (16)
И кстати - std::chrono в Google NDK более-менее доступен (при использовании), но std::chrono::monotonic_clock, к примеру, не гарантирует монотонности, а просто и тупо является алиасом к std::chrono::system_clock. Как говорится, удачи в отладке. Даже предупреждения не выдается при сборке.А в CrystaX NDK std::chrono::monotonic_clock - это честный monotonic clock, на ход времени которого не влияет переустановка системного времени. И это только один из множества примеров, когда, чтобы поймать ошибку, приходится отлаживаться не то чтобы часами или днями, но иногда даже неделями - и все только для того, чтобы выяснить, что баг в системной libc или в gnustl. До сих пор вспоминаю, сколько времени пришлось потратить, чтоб в конце концов выяснить, что strtod() не парсит строки "0xNNN", а просто возвращает нуль. Если б хотя бы падала, легче найти причину было бы - но нет, просто 0 на выходе. А чтобы дойти до strtod(), пришлось продраться через огромную гору кода, и затратить на это несколько дней.
- Вышел CrystaX NDK 10.1.0, инструментарий для разработки Andr..., Аноним, 02:41 , 02-Фев-15 (17)
- Вышел CrystaX NDK 10.1.0, инструментарий для разработки Andr..., crystax, 02:52 , 02-Фев-15 (18)
> (спаведливости ради следует отметить, что std::thread и std::mutex работали корректно > уже в r9c - в более ранних версиях не пробовал).Верно, это я ошибся. Просто я с этим столкнулся намного ранее r9c (еще в r7), и мне немало пришлось потрудиться, чтоб заставить std::thread и std::mutex корректно работать. Ну а сейчас произошла некоторая аберрация памяти и я назвал std::thread/std::mutex в списке недоступных фич. > Однако при попытке сделать это ("просто заменить") с проектом с native activity > запускаемым через native_app_glue, и использующим минимиум third-party библиотек (Box2D, > tinyxml2 и libpng) проект успешно компилируется, однако не запускается на планшете > ("...could not load application..."). Надо просто загрузить libcrystax.so перед загрузкой native activity. Если у вас есть хоть сколько-нибудь Java кода, то проще всего это сделать так: static { System.loadLibrary("crystax"); } Если же Java нет и добавлять не хочется, то можно: - написать свой stub, в котором делать dlopen() для libcrystax.so и затем передавать управление native activity (вот тут это хорошо объясняется: http://stackoverflow.com/questions/12524664/cant-load-native...) - либо просто статически слинковаться с libcrystax.a > 2. Можно ли слинковать вашу библиотеку libcrystax с программой статически? Да, можно. Если используется ndk-build, то просто добавьте в ваш Application.mk: APP_LIBCRYSTAX := static
|