Unity: DllNotFoundException (Unity 2018.2; Android) - PullRequest
0 голосов
/ 27 августа 2018

У меня есть собственная библиотека Android (кодовая база C ++), которая называется:

libserverapp.so

И я не могу получить сборку Android, чтобы найти его:

"DllNotFoundException: serverapp"

Я использую внутреннюю систему сборки, но когда я анализирую выходные данные процесса сборки, я вижу много вызовов вида:

android-ndk / toolchains / arm-linux-androideabi-4.6 / готовый / windows / bin / arm-linux-androideabi-g ++. Exe -march = armv7-a

После создания приложения для Android я проверяю полученный APK (переименовываем в .zip и распаковываю) и вижу мой библиотечный файл здесь:

Библиотека / armeabi-v7a / libserverapp.so

Я могу подтвердить, что "ARMv7" является целевой архитектурой в настройках проигрывателя Android, и я получаю доступ к библиотеке в C # с помощью:

[DllImport("serverapp", CallingConvention = CallingConvention.Cdecl)]
private static extern void run_sim(StringBuilder matchInput, StringBuilder results, int randomSeed);

Я создал Windows DLL из кода C ++ для использования в редакторе, и все отлично работает. Однако, когда я перехожу на Android, .so не может быть найден. Параметры импорта для libserverapp.so:

Платформа: Android; Процессор: ARMv7; Путь: ресурсы / плагины / Android / libserverapp.so; Тип: родной

Учитывая, что в окончательный APK входит. Кроме того, я не использую IL2CPP для сборки Android.

Наконец, когда я делаю объектный дамп файла библиотеки (используя arm-linux-androideabi-objdump.exe), формат файла библиотеки - "elf32-littlearm".

Я чувствую, что проблема в том, чтобы просто найти .so, а не его функциональность. Есть идеи о том, что здесь происходит?

Спасибо!

1 Ответ

0 голосов
/ 29 августа 2018

Я решил проблему. Я упоминал, что использовал внутреннюю систему сборки. Ну, похоже, в этом есть ошибка. Я портировал вещи на официальные make-файлы Android NDK, и тогда это «просто сработало». Таким образом, в этом случае библиотека может быть найдена, но ее содержимое недопустимо.

...