【问题标题】:Unity: DllNotFoundException (Unity 2018.2; Android)Unity:DllNotFoundException(Unity 2018.2;Android)
【发布时间】:2018-08-27 19:53:31
【问题描述】:

我有一个 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

我可以确认“ARMv7”是 Android Player 设置中的目标架构,并且我可以通过以下方式访问 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 的导入设置为:

平台:安卓; CPU:ARMv7;路径:Assets/Plugins/Android/libserverapp.so;类型:原生

鉴于最终的 APK 包含 .so 我期望的位置 (lib/armeabi-v7a/),我假设我的 Unity 设置是正确的?另外,我没有将 IL2CPP 用于 Android 构建。

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

我觉得这里的问题只是找到 .so,而不是其中的功能。关于这里发生了什么的任何想法?

谢谢!

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 什么是官方的Android NDK make 文件?我在哪里可以找到它们?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 2020-09-04
  • 2019-01-18
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
相关资源
最近更新 更多