#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» был особенно ясен и полезен и помог мне создать еще одну значительную часть базовых знаний, которых мне не хватало.