插件在 Linux Unity Editor 中有效,但在独立的 Linux 构建中无效
Plugin works in Linux Unity Editor but not in standalone Linux build
我从这个例子的代码中得到了一个非常简单的插件 (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 上的 OS 运行 是否有问题?
- 在另一台 PC 上从 Ubuntu 15.10 运行 开始尝试
- 也许插件需要 'lib' 前缀?
- 添加了 'lib' 前缀。
- 导入设置有问题吗?
- 已检查导入设置,已在平台设置x86_64中检查
- 库是否需要位于不同的目录中?
- 放入插件
- 输入Plugins/x86_64
- 放在与可执行文件相同的目录中
关于为 Linux 构建 Unity 插件的信息似乎也很少。一个端到端的例子会很有用。任何解决此问题的帮助将不胜感激。
正如预期的那样,这最终解决起来有点晦涩难懂。我发现有人 运行 遇到了同样的问题,他们能够帮助我。 Unity 在 Linux 上加载库的方式有些奇怪,这是解决方案。
- 'lib' 必须是图书馆的前缀。例如libSimplePlugin.so
- Unity 中的导入选项应该正确设置
- 在 "Select platforms for plugin" 下检查 "Editor" 和 "Standalone"
- 在 "Platform settings" 中的 Unity 选项卡 select CPU: x86_64, OS: Linux
- 在 "PC, Mac & Linux Standalone settings" 选项卡中勾选 x86_64
- 注意:我的库只有 64 位,设置可能因您的库构建而异
- 注意:您可以在没有其中一些的情况下逃脱,但为了安全起见并正确设置导入设置会更好
将你的 externs 放在它们自己的静态 C# 中 class 并有条件处理 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 中使用
我从这个例子的代码中得到了一个非常简单的插件 (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 上的 OS 运行 是否有问题?
- 在另一台 PC 上从 Ubuntu 15.10 运行 开始尝试
- 也许插件需要 'lib' 前缀?
- 添加了 'lib' 前缀。
- 导入设置有问题吗?
- 已检查导入设置,已在平台设置x86_64中检查
- 库是否需要位于不同的目录中?
- 放入插件
- 输入Plugins/x86_64
- 放在与可执行文件相同的目录中
关于为 Linux 构建 Unity 插件的信息似乎也很少。一个端到端的例子会很有用。任何解决此问题的帮助将不胜感激。
正如预期的那样,这最终解决起来有点晦涩难懂。我发现有人 运行 遇到了同样的问题,他们能够帮助我。 Unity 在 Linux 上加载库的方式有些奇怪,这是解决方案。
- 'lib' 必须是图书馆的前缀。例如libSimplePlugin.so
- Unity 中的导入选项应该正确设置
- 在 "Select platforms for plugin" 下检查 "Editor" 和 "Standalone"
- 在 "Platform settings" 中的 Unity 选项卡 select CPU: x86_64, OS: Linux
- 在 "PC, Mac & Linux Standalone settings" 选项卡中勾选 x86_64
- 注意:我的库只有 64 位,设置可能因您的库构建而异
- 注意:您可以在没有其中一些的情况下逃脱,但为了安全起见并正确设置导入设置会更好
将你的 externs 放在它们自己的静态 C# 中 class 并有条件处理 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 中使用