我有一个包含很多.so文件的文件夹,我正在尝试使用我的代码运行时。
我将它们放在一个名为“External”的文件夹中,然后我尝试像这样访问它们:
[DllImport("External\\libvocon_ext_heap.so", EntryPoint = "ph_CreateWin32PrivateHeap", CallingConvention = CallingConvention.Cdecl)]
public static extern PH_ERROR ph_CreateWin32PrivateHeap(ref LH_HEAP_INTERFACE pHeapInterface, out IntPtr ppHeapInst);
我也尝试将文件放在Assets文件夹中,但我仍然得到相同的System.DllNotFoundException
答案 0 :(得分:1)
这是一个迟到的答案,但我找到了解决问题的方法。主要问题是我如何将库文件存储在项目中。为了找到库文件,必须将它们存储在特定目录下。它们不是像我一样存储在“外部”目录中,而是必须存储在名为“libs”的目录和一个特定的子目录中,如下所示:
由于Android CPU可以基于3种不同的ARM体系结构,因此每种体系结构都必须有一个目录(armeabi,armeabi-v7a,x86)。我导入了这样的库文件:
[DllImport("libvocon_ext_heap.so", EntryPoint = "ph_CreateWin32PrivateHeap", CallingConvention = CallingConvention.Cdecl)]
您只需要编写库文件的名称,因为它将自己找到正确的目录路径。您还可以将名称写为“vocon_ext_heap”,因为如果文件名丢失,它可以自动将“lib”和“.so”添加到文件名中。
我还重新安装了Xamarin SDK管理器,因为我找到了一个可能的解决方案,要求重新安装它,但我不知道它是否修复了与此问题相关的任何内容。此外,库当然必须像Softlion所提到的那样构建为AndroidNativeLibrary。
答案 1 :(得分:0)
您是否已将so文件的构建操作设置为AndroidNativeLibrary?
请参阅https://developer.xamarin.com/guides/android/advanced_topics/using_native_libraries/