LINUX.ORG.RU

Ошибка загрузки библиотеки libmylib.so

 , ,


0

1

Собрал библиотеку (shared library *.so), закинул ее в Андроид приложение, делаю вызов ее из Нативного кода (почти такой же либы), все работает хорошо.

Понадобилось добавить поддержку BigNumber(GMP), Добавляю, собираю, запускаю в андроид и выдает ошибку: dlopen failed: cannot locate symbol "__gmp"

На Windows, если собираю *.exe (консольный вывод работает и показывает нужные BigNumber)

Тут же убираю ф-ю main() (вместо нее пишу другой заголово с аргументами), собираю с помощью gcc для arm и выдает такую ошибку.

Если не использовать поддержку GMP, то всё работает. Что Говорит Эта ошибка, понятно что не удается найти символ, как это исправить?


Как ты её собираешь нам, может, самим догадаться?

slovazap ★★★★★
()

Банальный:

$ strings libgmp.so | grep __gmp

Даёт какие-нибудь результаты?

Как компилировалась библиотека для Android?

EXL ★★★★★
()

Правильно ли я понимаю: libgmp.so линкуется динамически к твоей библиотеке?

Если да, то скорее всего libgmp.so не находится загрузчиком при подключении твоей библиотеки к приложению.

blex ★★★
()

В общем разобрался вроде, при общей сборке(компиляция+линковка) линкер игнорирует статичесукю библиотеку libgmp.a. Когда из своего исходника делаю объектный файл(без компиляции), а второй командой подставляю свой libmylib.o + libgmp.a, то все собирается в общую libmylib.so, правда размер сразу увеличивается намного. А после запуска все равно ошибка, не может найти какой-то символ, в итоге бросил эту затею. Либа после сборки просит много чего для своей работы.

Главное подобная программа работает и на Ubuntu и на Windows, а на Андроид в качестве Библиотеки не хочет.

P.S. Отвечу на вопрос товарища:

Я хотел свою Динамическую библиотеку собрать со статической ibgmp.a

(mycode.c + libgmp.a = libMycode.so)

Получилось только так:

gcc -c mycode.c -> mycode.o

gcc mycode.o -L. libgmp.a -o libMycode.so,(доп ключи убрал для лучшего понимания, может надо было ld запскать во второй раз - не знаю)

но тоже костыль какой-то в итоге.

Далее вызывать свою libMycode.so из другой Библиотеки otherName.so, которая в свою очередь загружает APK(андроид приложение)

Спасибо всем кто откликнулся!

Devill
() автор топика
Последнее исправление: Devill (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.