Сборка с GLIBC для библиотеки NDK - PullRequest
2 голосов
/ 11 января 2012

Я заинтересован в создании проекта с открытым исходным кодом, и для этого требуются библиотеки GNU GLIBC и GLIBM. Если бы мне пришлось кросс-компилировать это под Linux (я использую Ubuntu 11.10 в качестве хоста) для общего (.so) или даже статического (.a) объекта, с архитектурой ARMv7-neon, используя API-9 Какие библиотеки будут предприняты для достижения этого результата, как библиотеки для вызова с JNI Java, чтобы в конечном итоге скомпилировать как APK для распространения?

Учитывая, что я попробовал набор инструментов Google NDK (жестко и легко настраивая $ PATH и $ CC в соответствии с документацией), множество пользовательских наборов инструментов, набор инструментов Code Sourcery и набор инструментов, предложенный для на форуме XDA с использованием crosstool-ng возможно ли получить общий объектный файл, который можно вызывать из JNI и который имеет доступ к полной библиотеке GLIBC на некорневом устройстве Android?

Я искал ответ на этот вопрос, и самое близкое, что я нашел, - это создать GLIBC и GLIBM локально и скопировать соответствующие файлы объектов (.o) и ссылки вручную, используя arm-linux-androideabi-ld NDK. Файл libc.so.6 из Crosstool-ng и CodeSourcery не будет работать, так как перемещение завершится неудачно (с ошибкой неизвестного типа перемещения 19) при вызове библиотеки с использованием Java System.LoadLibarary (). Мои знания о перемещениях не самые лучшие, но из того, что я прочитал, потребуются изменения в заголовочном файле /linux/elf.h, но я точно не знаю, куда идти.

Из того, что я прочитал, я полагаю, что можно создать статический исполняемый файл, в котором все зависимости разрешены при связывании, но тогда, насколько я знаю, не будет возможности упаковать его в файл APK.

Конечно, я не могу быть первым, кто захочет скомпилировать код на языке C для чего-то другого, кроме Bionic, для платформы Android? Существует так много C-проектов, которые можно перенести на Android, и, очевидно, GLIBC уже давно доступен на iPhone.

1 Ответ

2 голосов
/ 11 января 2012

Любая библиотека низкого уровня C тесно связана с самой ОС. Хотя Linux и Android могут в основном быть одним и тем же, это не так. Сборка против другой библиотеки C потребует, чтобы указанная библиотека C была портирована первой.

...