【问题标题】:Plugin works in Linux Unity Editor but not in standalone Linux build插件适用于 Linux Unity 编辑器,但不适用于独立的 Linux 构建
【发布时间】:2016-09-05 02:23:24
【问题描述】:

我有一个来自此示例代码的非常简单的插件 (https://docs.unity3d.com/Manual/NativePlugins.html)。我正在使用插件中的值更新 UI 文本字段。这在编辑器中按预期工作,但在我构建独立应用程序时不起作用。我正在运行 Ubuntu 15.10。

图书馆是如何建造的:

gcc -shared PluginName.c -o PluginName.so

这是我迄今为止尝试过的:

  • LD_LIBRARY_PATH 有什么问题?
    • 将 .so 所在的目录添加到 LD_LIBRARY_PATH 中
  • Unity 构建应用程序的方式是否存在问题?
    • 尝试了不同的版本 (5.3.6)
  • VM 上运行的操作系统是否存在问题?
    • 尝试在另一台 PC 上运行 Ubuntu 15.10
  • 也许插件需要'lib'前缀?
    • 添加了“lib”前缀。
  • 导入设置有问题吗?
    • 检查导入设置,检查平台设置中的 x86_64
  • 库是否需要位于不同的目录中?
    • 插入插件
    • 放入 Plugins/x86_64
    • 与可执行文件放在同一目录中

似乎也很少有关于为 Linux 构建 Unity 插件的信息。一个端到端的例子会很有用。对此问题的任何帮助将不胜感激。

【问题讨论】:

  • 您编写了所有这些,但未能提供您如何使用 C# 加载插件......
  • 请看我问题第一行的链接。 [DllImport ("PluginName")] private static extern float FooPluginFunction ();
  • 你是否在编译中添加了-fPIC选项(你需要这个来创建一个共享对象,.so)
  • 感谢您的建议。我没有使用这个特定的插件,而是使用了另一个有同样问题的插件。我刚刚尝试将 -fPIC 添加到此插件的构建命令中,我遇到了同样的问题。
  • @AndreiTumbar -fPIC 不是必需的,但可以防止将来出现问题。请看这篇帖子stackoverflow.com/questions/5311515/gcc-fpic-option

标签: c ubuntu unity3d plugins unityscript


【解决方案1】:

正如预期的那样,这最终变得有点难以解决。我找到了遇到同样问题的人,他们能够帮助我。 Unity 在 Linux 上加载库的方式有些奇怪,这是解决方案。

  • 'lib' 必须是库的前缀。例如libSimplePlugin.so
  • 应正确设置 Unity 中的导入选项
    • 在“为插件选择平台”下选中“编辑器”和“独立”
    • 在 Unity 选项卡的“平台设置”中选择 CPU:x86_64,操作系统:Linux
    • 在“PC、Mac 和 Linux 独立设置”选项卡中检查 x86_64
    • 注意:我的库只有 64 位,设置可能因您的库版本而异
    • 注意:您可以不使用其中的一些,但最好还是在安全方面犯错并正确设置导入设置
  • 将你的外部对象放在它们自己的静态 C# 类中,并有条件处理 Unity 库命名

    using System;
    using System.Runtime.InteropServices;
    
    public static class Native
    {   
        // The name of the external library containing the native functions
        #if UNITY_EDITOR
        private const string LIBRARY_NAME = "libSimplePlugin";
        #else
        private const string LIBRARY_NAME = "SimplePlugin";
        #endif
    
        [DllImport(LIBRARY_NAME)] public static extern float FooPluginFunction ();
    } 
    
  • 调用你的函数

    Native.FooPluginFunction ();
    
  • 已验证可在 Unity 5.3.6 中使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2011-03-09
    • 2011-10-27
    • 1970-01-01
    相关资源
    最近更新 更多