Unity:DllNotFoundException(Unity 2018.2; Android)

时间:2018-08-27 19:53:31

标签: android c++ unity3d shared-libraries native

我有一个Android本机库(C ++代码库),名为:

libserverapp.so

我无法通过Android构建找到它:

“ DllNotFoundException:serverapp”

我正在使用内部构建系统,但是当我解析构建过程的输出时,我可以看到许多形式的调用:

android-ndk / toolchains / arm-linux-androideabi-4.6 / prebuilt / windows / bin / arm-linux-androideabi-g ++。exe -march = armv7-a

构建Android应用后,我检查了生成的APK(重新命名为.zip并提取),并可以在此处查看我的库文件:

lib / armeabi-v7a / libserverapp.so

我可以在Android Player设置中确认“ ARMv7”是目标体系结构,然后通过以下方式使用C#访问该库:

[DllImport("serverapp", CallingConvention = CallingConvention.Cdecl)]
private static extern void run_sim(StringBuilder matchInput, StringBuilder results, int randomSeed);

我已经构建了C ++代码的Windows DLL,可以在编辑器中使用,并且一切正常。但是,当我转到Android时,找不到.so。 libserverapp.so的导入设置为:

平台:Android; CPU:ARMv7;路径:Assets / Plugins / Android / libserverapp.so;类型:本机

鉴于最终的APK包含.so,我希望它在(lib / armeabi-v7a /)中,我认为我的Unity设置正确吗?另外,我没有将IL2CPP用于Android版本。

最后,当我执行库文件的对象转储时(使用arm-linux-androideabi-objdump.exe),库文件的文件格式为“ elf32-littlearm”。

我觉得这里的问题是简单地找到.so,而不是其中的功能。对这里发生的事情有任何想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我最终解决了这个问题。我提到那是使用内部构建系统。好吧,似乎有一个错误。我将内容移植到了官方的Android NDK makefile中,然后“正常工作”。因此,在这种情况下,可以找到该库,但是其内容无效。