Xamarin - 尝试加载libtbb.so结果" libc.so"在运行时找不到消息

时间:2018-04-30 10:31:18

标签: android xamarin xamarin.android android-ndk tbb

我正在使用Xamarin.Forms开发应用程序,目前正在Android手机上测试它(Android 6,armeabi-v7a)。目标API是21,我的开发机器运行Windows。我还使用了由NDK构建的几个本机库,但是为了隔离,我创建了一个小型库,除了从单个导出函数返回一个数字之外什么都不做。

现在我需要将英特尔TBB库链接到我的本机库,因此我使用ndk构建工具和克隆TBB存储库来构建一个:

ndk-build target=android tbb tbb_os=windows arch=armeabi-v7a

这导致libtbb.solibtbb_debug.so个库,然后我将其添加到我的Xamarin Android项目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。

任何想法如何解决这个问题?

编辑:当我在MSVS中将TBB构建为静态库时,现在的消息是,它无法找到&#34; libm.so&#34; (TBB也需要)

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:

我通过重新配置项目以及以下某些方法解决了这个问题:

  • 将TBB库构建为静态
  • 使用静态版本的libc ++
  • 将最低API级别提高到21(过去是19)

但是,我不确定真正的问题是什么。

编辑:执行静态链接的一般想法来自:https://software.intel.com/en-us/forums/intel-threading-building-blocks/topic/623425