Я занимаюсь разработкой приложения с использованием Xamarin.Forms и в настоящее время тестирую его на телефоне Android (Android 6, armeabi-v7a). Целевой API - 21, на моей машине работает Windows. Я также использую несколько собственных библиотек, собранных NDK, но для изоляции я создал одну маленькую библиотеку, которая ничего не делает, кроме как возвращает число из одной экспортированной функции.
Теперь мне нужно связать библиотеку Intel TBB с моей нативной библиотекой, поэтому я собираю ее, используя инструменты сборки ndk и клон репозитория TBB:
ndk-build target=android tbb tbb_os=windows arch=armeabi-v7a
В результате появились библиотеки libtbb.so
и libtbb_debug.so
, которые я затем добавил в свой проект Android Xamarin как AndroidNativeLibrary
, дополнительно установил <Abi>armeabi-v7a</Abi>
и скопировал в каталог назначения, скомпилировал и развернул на моем телефоне.
Также у меня есть некоторый тестовый код на C # только для вызова нативной библиотеки (которая прекрасно работает без привязки TBB).
Вот проблема - после связывания TBB (даже без использования чего-либо из библиотеки TBB) происходит сбой кода при попытке загрузить собственную библиотеку с сообщением:
DllImport error loading library 'libmyproject_experimental.so': 'dlopen failed: cannot find "libc.so" from verneed[0] in DT_NEEDED list for "/data/app/com.example.myapp.myproject-1/lib/arm/libtbb.so"'.
Итак, я создал новый проект в своем проекте Xamarin для TBB, добавил источники TBB, установил правильные флаги, чтобы код собирался правильно (я установил те же флаги, что и в выходных данных ndk-build), и добавил ссылку на проект TBB в свой экспериментальный библиотека. Это просто перенесло проблему из TBB в мою библиотеку:
DllImport error loading library 'libmyproject_experimental.so': 'dlopen failed: cannot find "libc.so" from verneed[0] in DT_NEEDED list for "/data/app/com.example.myapp.myproject-1/lib/arm/libmyproject_experimental.so"'.
Я также изменил STL на libc ++ _, доступный повсеместно, включил исключения и RTTI и установил c ++ 1y в качестве стандарта C ++. Также я использую Clang 5.0.
Есть идеи, как решить эту проблему?
РЕДАКТИРОВАТЬ: когда я собираю TBB в MSVS как статическую библиотеку, в сообщении теперь говорится, что он не может найти "libm.so" (который также необходим TBB)