【问题标题】:Using 3rd Party shared library on Android with NDK with Untiy3D在 Android 上使用带有 Unity3D 的 NDK 的 3rd 方共享库
【发布时间】:2013-09-14 16:02:36
【问题描述】:

我正在尝试使用 NDK 制作一个使用 FMOD for Android 的 Android 插件(我需要它是本机的,因为我还使用需要与 FMOD 交互的第三方开源 C++ 库,效果很好)。 我可以使用 NDK OK 编译所有内容,但是当我创建 Unity 项目时,如果我使用 FMOD 共享库,我总是会收到 DLLNotFoundException。 请注意,如果我不包含任何 FMOD 调用,我创建的共享库可以正常工作,所以我很确定 Unity 播放器找不到 FMOD 共享库。

这是我的插件代码:

extern "C" {
#endif

    static int mycount = 0;
    int FooTest(){

        unsigned int version;
        FMOD::System* system_;

        //Init
        FMOD_RESULT result = FMOD::System_Create(&system_);
        if (result != FMOD_OK) return -1;

        result = system_->getVersion(&version);
        if (result != FMOD_OK) return -1;

        if (version < FMOD_VERSION)
        {
            //printf("Error!  You are using an old version of FMOD %08x.  This program requires %08x\n", version, FMOD_VERSION);
            return -1;
        }
        result = system_->init(32, FMOD_INIT_NORMAL, 0);
        if (result != FMOD_OK) return -1;

        return mycount++;
    }


#ifdef __cplusplus
}
#endif

如果我注释掉所有 FMOD 内容,返回的计数会增加并显示在屏幕上。每当我使用 FMOD 调用构建时,我都会收到“DLLNotFoundException:FooTest”

我将 fmodex.so 和 fmodexL.so 库都包含在我的 plugins/android 目录和我的项目的根目录中,并且我检查了它们是否存在于生成的 APK 的 lib/armeabi 文件夹中。

如果有人感兴趣,我还可以发布我用来生成共享库的 Android makefile。

【问题讨论】:

    标签: android plugins android-ndk


    【解决方案1】:

    .so 库必须包含在项目的根目录中才能找到它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-20
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多