Есть ли способ запустить библиотеку .so (составленную NDK для Android aarch64) в Linux aarch64 (cent7 Arm)? ⇐ Linux
Есть ли способ запустить библиотеку .so (составленную NDK для Android aarch64) в Linux aarch64 (cent7 Arm)?
У меня есть скомпилированная общая библиотека aarch64 (my_custom.so), которая была успешно интегрирована в APK и работает на устройствах Android. Поскольку это автономная низкоуровневая вычислительная библиотека, не зависящая от компонентов системы Android.
Я изучаю возможность создания исполняемого файла aarch64 для Linux, включающего эту библиотеку. Это обеспечит те же функции на стороне сервера и станет альтернативой устройствам Android, используя общую архитектуру aarch64.
К сожалению, исходный код my_custom.so утерян.
С помощью таких команд, как ldd и readelf, я подтвердил, что my_custom.so зависит только от libc.so, libc++_shared.so, liblog.so и libz.so. Однако возникает ошибка, указывающая, что библиотека /lib64/libc.so имеет недопустимый заголовок ELF: «/lib64/libc.so неверный заголовок elf. "
После использования команды cat я убедился, что /lib64/libc.so на самом деле является текстовым файлом, а фактический файл библиотеки — /lib64/libc.so.6. Когда я попытался создать символическую ссылку из /lib64/libc.so на /lib64/libc.so.6, я столкнулся с ошибкой: версия glibc не найдена.
Я предполагаю, что это несоответствие может быть связано с тем, что my_custom.so скомпилирован с NDK, который использует библиотеку libc, отличную от той, которая присутствует в моей текущей среде Linux aarch64. Поэтому я попытался найти соответствующую библиотеку libc в каталоге платформы NDK.
Я скопировал libc.so из каталога платформ NDK и загрузил его перед my_custom.so, но столкнулся с **ошибкой «не выровнено по странице». Исследования Google показывают, что это может быть связано с тем, что библиотеки не соответствуют большему размеру страницы. Поскольку размер страницы памяти текущей системы не подлежит изменению, я сейчас ищу альтернативные версии libc.so
После копирования libc.so из /toolchains/llvm/prebuilt/ в NDK я проверил его с помощью ldd. Я также скопировал libc++_shared.so из каталога llvm, и он также прошел проверку ldd.
Однако, когда я запустил всю программу, это привело к дампу ядра...
Я хочу знать, можно ли запустить библиотеку .so (составленную NDK для Android aarch64) в Linux aarch64. Если это возможно, правильный ли мой подход и что мне делать дальше?
Я полагаю, что использование таких технологий, как QEMU или Anbox, для запуска виртуальной машины Android в Linux может быть реальным решением. Однако, учитывая, что my_custom.so не зависит ни от каких компонентов системы Android, я считаю, что подход с использованием виртуальных машин относительно сложен и ресурсоемок, что приводит к потенциальной потере ресурсов.
У меня есть скомпилированная общая библиотека aarch64 (my_custom.so), которая была успешно интегрирована в APK и работает на устройствах Android. Поскольку это автономная низкоуровневая вычислительная библиотека, не зависящая от компонентов системы Android.
Я изучаю возможность создания исполняемого файла aarch64 для Linux, включающего эту библиотеку. Это обеспечит те же функции на стороне сервера и станет альтернативой устройствам Android, используя общую архитектуру aarch64.
К сожалению, исходный код my_custom.so утерян.
С помощью таких команд, как ldd и readelf, я подтвердил, что my_custom.so зависит только от libc.so, libc++_shared.so, liblog.so и libz.so. Однако возникает ошибка, указывающая, что библиотека /lib64/libc.so имеет недопустимый заголовок ELF: «/lib64/libc.so неверный заголовок elf. "
После использования команды cat я убедился, что /lib64/libc.so на самом деле является текстовым файлом, а фактический файл библиотеки — /lib64/libc.so.6. Когда я попытался создать символическую ссылку из /lib64/libc.so на /lib64/libc.so.6, я столкнулся с ошибкой: версия glibc не найдена.
Я предполагаю, что это несоответствие может быть связано с тем, что my_custom.so скомпилирован с NDK, который использует библиотеку libc, отличную от той, которая присутствует в моей текущей среде Linux aarch64. Поэтому я попытался найти соответствующую библиотеку libc в каталоге платформы NDK.
Я скопировал libc.so из каталога платформ NDK и загрузил его перед my_custom.so, но столкнулся с **ошибкой «не выровнено по странице». Исследования Google показывают, что это может быть связано с тем, что библиотеки не соответствуют большему размеру страницы. Поскольку размер страницы памяти текущей системы не подлежит изменению, я сейчас ищу альтернативные версии libc.so
После копирования libc.so из /toolchains/llvm/prebuilt/ в NDK я проверил его с помощью ldd. Я также скопировал libc++_shared.so из каталога llvm, и он также прошел проверку ldd.
Однако, когда я запустил всю программу, это привело к дампу ядра...
Я хочу знать, можно ли запустить библиотеку .so (составленную NDK для Android aarch64) в Linux aarch64. Если это возможно, правильный ли мой подход и что мне делать дальше?
Я полагаю, что использование таких технологий, как QEMU или Anbox, для запуска виртуальной машины Android в Linux может быть реальным решением. Однако, учитывая, что my_custom.so не зависит ни от каких компонентов системы Android, я считаю, что подход с использованием виртуальных машин относительно сложен и ресурсоемок, что приводит к потенциальной потере ресурсов.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение