Подтвердить что ты не робот

Разница между статическими и разделяемыми библиотеками в Android NDK?

Я новичок в Android NDK, и я не понимаю различия между статическими и разделяемыми библиотеками. Каковы они, и когда я буду выбирать один тип над другим?

4b9b3361

Ответ 1

Термин разделяемая библиотека не подходит для Android NDK, потому что во многих случаях библиотеки .so фактически не разделяются между приложениями. Лучше классифицировать библиотеки, которые NDK создает как статические и динамические.

Каждое приложение для Android представляет собой приложение Java, и единственная точка входа для кода NDK загружает его как динамическую библиотеку и вызывает ее через JNI.

Статические библиотеки - это архивы скомпилированных объектных файлов. Они собираются в другие библиотеки во время сборки. Неиспользуемые части кода из статических библиотек разделяются NDK, чтобы уменьшить общий размер.

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

Итак, что вам действительно нужно для разработки Android, это, по крайней мере, одна общая библиотека, которая будет вызываться из кода Java и связана с ней зависимостями как предпочтительными статическими библиотеками.

Ответ 2

Собственные общие библиотеки: NDK создает эти библиотеки или .so файлы из собственного исходного кода. Собственные статические библиотеки: NDK также может создавать статические библиотеки или файлы .a, которые вы можете связать с другими библиотеками.

Это согласно документации NDK

Ответ 3

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

Общие библиотеки - в конечном исполняемом файле есть только ссылки на библиотеки, а не сам код. Это требует, чтобы среда, в которой мы запускаем наш исполняемый файл, имела доступ ко всем файлам библиотек, используемых нашей программой.