У меня есть программа на C#, которая использует некоторые функции из .so файла, но почему-то в ubuntu она отказывается находить его, хотя он есть в папке с программой.
Я получаю следующую ошибку:
System.DllNotFoundException: libjdczlib.so assembly: type: member:(null)
И не важно есть ли файл или нет, ошибка не меняется
Я запускал программу так же через mono в термуксе на телефоне и там всё работает
Klucva, путь начинающийся с "/" считается от корня vfs.
так что надо подставлять полный путь, смотри ответ shurshur
а добавлять путь (ибо на момент запуска проги LD_LIBRARY_PATH может быть не пустым) как указал jcmvbkbc. но он указал опять же путь от корня :)
сделай все правильно.
Klucva, можно, если ты готов затащить в свою систему mono со всеми его зависимостями для aarch64. Поставь qemu-user и qemu-user-binfmt и просто запускай mono для aarch64.
Klucva, могу предложить примерный план, как бы я стал действовать сам:
- сделать debootstrap для нужной версии ubuntu архитектуры aarch64
- потом туда доустановить mono-runtime
- запускать установленный mono с переменной окружения QEMU_LD_PREFIX установленной в путь до каталога куда сделан debootstrap.
Ты спросишь: "а какая это -- нужная версия"? А ответ: "а такая, какая стоит там, где у тебя запускалось". Ты скажешь: "а там не убунту". А ответ будет: "тогда, возможно, этот твой .so под убунту не заработает вообще".
jcmvbkbc, у меня ещё есть raspberry pi 3b и uname -a выдает:
Linux ubuntu 5.4.0-1062-raspi #70-Ubuntu SMP PREEMPT Thu May 19 12:44:59 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
Но всё равно mono выдаёт ту же ошибку
Ещё я запустил uname -a термуксе:
Linux localhost 4.9.112-perf-ga288507 #1 SMP PREEMPT Fri Oct 25 19:35:07 CST 2019 aarch64 Android
он тоже выдаёт aarch64, только там всё работает
Klucva, возможно у твоего .so есть зависимости в андроеде. Посмотри, что говорит ldd твой.so в системе где он работает. Или если нет возможности запустить там ldd, что говорит readelf -d твой.so (в любой системе).
Klucva, чтобы не играть в кошки-мышки ты можешь скопировать с андроида всю файловую систему в отдельный каталог на малине, сделать туда chroot и запускать mono оттуда.