Android NDK: документация библиотеки gnustl_static?

#c #android-ndk #gnu

#c #android-ndk #gnu

Вопрос:

По профессии я разработчик Java, и до сих пор мое знакомство с C / JNI было ограниченным.

До сих пор мне удавалось делать довольно хорошо, но теперь, когда я отваживаюсь делать «Умные» вещи, я становлюсь все более и более ограниченным, действуя вслепую:

Я использую библиотеку gnustl_static из-за другого кода, который я портировал в том же собственном пространстве проекта. Однако мне очень сложно изучать C с одной рукой, связанной за спиной, из-за урезанного характера библиотеки.

Все было бы хорошо, если бы был Javadoc (очевидно, не Javadoc ;)) или какая-то подобная документация, которую я мог бы использовать, чтобы найти, что было включено в эту библиотеку и, в свою очередь, что содержалось в этих библиотеках (и пока я мечтаю о луне), почему определенные типы, такие как «map», не включены и что лучше использовать вместо этого!

При поиске в Google за последние недели я не наткнулся ни на один централизованный и полезный ресурс, и, исходя из знаний и опыта всех остальных, я чувствую, что мне не хватает жизненно важного и базового ресурса!

Не мог бы кто-нибудь, пожалуйста, протянуть мне руку помощи и указать на документацию, или учебные пособия, или примеры, или что-то еще, что поможет мне ориентироваться в опасных водах JNI / C / Native Android coding?

Редактировать:

Кто-то объяснил мне, что STL — это стандартная библиотека шаблонов, и здесь есть ссылка на то, что содержится в ней:http://www.sgi.com/tech/stl/stl_index.html

Они также объяснили, что библиотека gnustl_static — это библиотека STL, основанная на компьютерах GNU, и это набор заголовков, расположенных внутри: $ {ANDROID-NDK}sources cxx-stl gnu-libstdc include

Достаточно сказать, что это неизмеримо помогло мне, поскольку я понятия не имел, что происходит. Я просто не знал достаточно, чтобы знать, где искать.

Я все еще немного обеспокоен тем фактом, что STL, похоже, кому-то не принадлежит? (Я думаю, здесь текст в стиле Apache). Кто-нибудь может меня поправить в этом?

Как вы можете судить. Здесь все еще немного не так.

ПРАВКА2:

Если STL — это библиотека, используемая для описания всех непримитивных типов и функций… почему string.h извлекается из: $ {ANDROID-NDK} platforms android-9 arch-arm usr include

PS: Я знаю, что это звучит глупо, но я обещаю, что я просто неосведомлен. Я просто не уверен, с чего начать поиск, поскольку чувствую необходимость начать с середины. Опять же, ссылки на все, что, по вашему мнению, я мог бы найти полезным, были бы великолепны!

Комментарии:

1. Я не думаю, что эта библиотека каким-либо образом урезана. Это должен быть GNU stdlibc целиком.

2. @Jan Hudec, похоже, у меня были ложные впечатления. Добавил правку в свой пост.

3. Я обновил приведенный ниже ответ, чтобы попытаться ответить на изменения 1 и 2.

Ответ №1:

gnustl_static является ли GNU stdlibc тем, что поставляется с gcc. Официальная документация находится здесь, но в качестве руководства она, вероятно, бесполезна, поэтому желательно взять какую-нибудь приличную книгу по C .

Библиотека, похоже, не урезана. Вам это может показаться таковым, потому что стандартная библиотека C , определенная в спецификации, просто намного меньше, чем в Java. Он имеет стандартный доступ к файлам, но без манипуляций с файлами, без потоков, без сети и т.д.

В Android, как правило, доступен интерфейс POSIX (обычный C). Если вам нужен C , попробуйте получить boost, который оборачивает различные системные интерфейсы в приличные переносимые компоненты C . Однако многие сервисы на платформе Android будут доступны только через уровень Java.

Редактировать объявление: Спецификация стандартной библиотеки принадлежит кому-то, а именно ISO. К сожалению, стандарт нельзя свободно загрузить из ISO, но поиск в Интернете показывает это.

Ad Edit2: Стандартная библиотека C основана на базовой стандартной библиотеке C. Стандартная библиотека C имеет заголовки без расширений, в то время как стандартная библиотека C имеет заголовки с суффиксом .h . Оба определены (разными) стандартами ISO. Библиотека C в наибольшей степени привязана к операционной системе (зависит от конкретного метода выполнения системных вызовов), поэтому она предоставляется вместе с системой. С другой стороны, библиотека C больше привязана к компилятору, в то время как она использует библиотеку C для взаимодействия с системой, поэтому она предоставляется вместе с компилятором. Вот почему они живут в разных местах.

Комментарии:

1. Большое вам спасибо. «Ad Edit2» был особенно ясен и полезен и помог мне создать еще одну значительную часть базовых знаний, которых мне не хватало.