Android.mk правила для создания файла.o из многих files.txt затем свяжите его с другими файлами.o создано из files.cpp

#android #build #makefile

#Android #сборка #makefile

Вопрос:

Я переношу менеджер модемных подключений, написанный на C , из Linux в gingerbread. В конечном итоге это не «приложение» с «графическим интерфейсом», которое я бы использовал в Java-оболочке с NDK, а сервис, который вызывается при загрузке из «init.rc». Я нашел несколько не обновленных документов, связанных с системой сборки Android, в разделе build / core /. Там вы найдете несколько HTML-файлов, объясняющих основы системы сборки Android, и несколько «file.mk » вот некоторые шаблоны для обычной ситуации, такой как создание исполняемого файла c , статических библиотек, разделяемой библиотеки и т.д.

Я размещаю свое дерево со всеми исходниками под external / myservice, и оно должно быть скомпилировано одновременно с самим Android. (Я уже портировал ядро на свою платформу, и оно работает, осталось подключить только модем)

Во вложенной папке в Android.mk файл, у меня есть куча файлов «.cpp», перечисленных с переменной LOCAL_SRC_FILES : = cppfile1.cpp cppfile2.cpp …. Это сгенерирует cppfile1.o cppfile2.o …

Мне нужно связать эти cppfile *.o с objfile.o для формирования libfile.so. Я нашел правила о том, как сгенерировать файл libfile.итак, из кучи файлов.o.

Что усложняется, так это перенос команды «linux makefile» для создания objfile.o. Вот как это выглядит

 $(LD) $(LDFLAGS) -r -b binary -o QMIDB.o   
            QMI/Entity.txt   
            QMI/EnumEntry.txt   
            QMI/Enum.txt   
            QMI/Field.txt   
            QMI/Struct.txt  
  

Что означает, что это задание компоновщика по объединению набора текстовых файлов для создания этого objfile.o. Этот файл представляет собой всего лишь набор инициализированных структур данных, в нем нет кода для выполнения, но вообще он довольно уродливый на вид files.txt с помощью текстового редактора.

Я понятия не имею, как интегрировать это в Android.mk файл. Как это можно сделать? Я был бы даже признателен за подсказку о том, где я могу найти больше информации. Легко найти информацию о создании приложений для Android, но совсем другая история — найти что-нибудь ближе к самому Android / Kernel.

Ответ №1:

Из mk. файл file вы можете легко получить so file….

Вам нужно использовать настройки Android Ndk и cygwin, если вы используете платформу Windows, чтобы создать файл so из вашего собственного кода.

Сначала установите и поместите ndk в папку…

Затем установите cygwin setup не по умолчанию, проверьте все функции в процессе установки (это своего рода терминал Linux), поскольку команда ndk-build распознается терминалом Linux.

Теперь с вашего терминала cygwin получите доступ к папке вашего проекта jni file .. или где размещен mk…

 http://developer.android.com/sdk/ndk/index.html
  

Используйте следующую ссылку, как запустить команду ndk-build из терминала cygwin..

Теперь, предоставляя полный путь к ndk, мы используем команду ndk-build…

После этого соответствующий код генерирует файл .so для нашего проекта…

Теперь мы используем команду System.loadlibrary для использования файла so, то есть теперь можно использовать наш собственный код.

Примечание, чтобы получить файл so в форме mk, нам нужно выполнить компиляцию с помощью ndk setup.Мы не можем напрямую скопировать и вставить файл so, чтобы запустить наш машинный код.Также мы используем Windows platfrom, для этого нам нужно будет использовать программу установки cygwin

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

1. Спасибо Arpit за информацию. Я уже нашел, как сгенерировать de «file.so «. Моя настоящая проблема заключается в том, как сгенерировать objfile. o из «files.txt «согласно команде Makefile, показанной в моем вопросе.

2. Если быть более точным, я не хочу создавать приложение для Android, и в этом случае мне нужен NDK для компиляции кода C / C . То, что я делаю, находится под управлением Dalvik и будет включено в Android, по крайней мере, порт, который я делаю для своей платформы. В Android уже есть код на C / C , и он не использует NDK для его компиляции.