Я экспериментирую с родными libs cross, скомпилированными из ubuntu. Я действительно хочу, чтобы иметь возможность компилировать мои библиотеки C++ и использовать их в приложении Xamarin.Android.Собственные библиотеки libs скомпилированы из ubuntu linux таргетинга arm (android)
Во-первых, у меня есть gcc-компилятор: arm-linux-gnueabi-gcc
. У меня есть простая lib (libmr.so), которая имеет одну функцию void Print();
, которая печатает что-то на консоли. Я компиляции с:
arm-linux-gnueabi-gcc -Wall -shared -o libmr.so mr.c
При осмотре его с помощью file libmr.so
кажется, что все будет хорошо. Однако, когда я включаю его в приложение для Android и пытаюсь его загрузить, он как будто его не существует. Я уверен, что он есть, путь абсолютно правильный, поскольку я пытался загрузить еще одну lib (libmonodroid.so
) из той же папки, и она сработала.
Я попытался проверки обоих LIBS, чтобы найти какой-то разницы:
$ objdump -x libmr.so | grep NEEDED
NEEDED libc.so.6
$ objdump -x libmonodroid.so | grep NEEDED
NEEDED libc.so
... (in addition to other libs)
Это единственное различие, которое я нахожу, что между ними. libmonodroid.so
правильно загружается, но libmr.so
действует так, как будто его не существует. (Я использую dlopen
загрузить ОМТ)
EDIT:
Я построил исполняемый, используя один и тот же набор инструментов, дал мне ключ:
- Статическое связывание с LIBC:
arm-linux-gnueabi-gcc -Wall -o hi source.c -static
. Выдвинулhi
на свои Android-устройства и выполнил его сadb
. Результат: УСПЕХ! - Динамическое соединение с libc:
arm-linux-gnueabi-gcc -Wall -o hi source.c
. Результат: его даже нет! Значение./hi
дает/system/bin/sh: ./hi: not found
, хотя это абсолютно так.
Итак, похоже, что libc действительно является виновником? Может быть, мне нужно связать динамически с не libc.so.6
, а с libc.so
точно так же, как libmonodroid.so
делает?
Использование ndk в качестве автономной инструментальной цепочки для создания вашего mr.c. http://stackoverflow.com/a/5239573/1163019 – auselen
@auselen yes Я сейчас изучаю это, выглядит многообещающим. Вернется с результатами. – mrahhal