【问题标题】:How to use LuaInterface on Mono/Linux如何在 Mono/Linux 上使用 LuaInterface
【发布时间】:2010-12-04 18:19:43
【问题描述】:

当我尝试在 Linux 上的 Mono 上使用 LuaInterface(在 Ubuntu 9.04 上使用 Mono 2.0)时,出现以下异常:

** (App.exe:8599): 警告 **: 方法 ':.DoDllLanguageSupportValidation ()' 在程序集中 '/home/ulrich/test/Debug/lua51.dll' 包含不能 由 Mono 在此平台上执行。 该程序集可能是使用 C++/CLI 创建的。

根据this web siteLuaInterface 可以与 Mono 一起使用。 MoMA 也这么说。

是否可以重新编译 lua51.dll 以使其与 Mono 兼容?

【问题讨论】:

    标签: c# .net mono lua luainterface


    【解决方案1】:

    LuaInterface 看起来是纯 C#,但它使用 混合模式 C++/CLI-ified 版本的 Windows 版本的原生 Lua 库,混合了 .NEt 代码和原生 32 位 Windows代码。除了 Windows 之外,没有适用于平台的 C++/CLI 编译器,因此您不能移植/重新编译 C++/CLI 代码,尽管它应该可以在 Win32 上的 Mono 上运行(或者可能是 Wine)..

    让它在 Mono 上运行的唯一真正可行的方法是让它使用 P/Invokes 而不是 C++/CLI。然后,您可以使用dllmap,这样当 Mono 尝试解析对 lua51.dll 的 P/Invoke 调用时,它会被重定向到 Linux 等效项 liblua.so.5.1。

    【讨论】:

    • 问题是lua51.dll没有使用DLLImport(),而是将非托管Lua代码直接编译到这个托管库中。
    • 糟糕,应该仔细看看 LuaInterface 模式。编辑使其正确。
    • 这听起来不太好,因为luainterface.googlecode.com/svn/trunk/lua-5.1.2/lua511/… 似乎做了很多“魔术”,...而且,...。为什么没有混合 C++/CLI 编译器? ?
    • C++ 编译器很难创建,更不用说像微软这样的编译器了,它可以将特殊语法编译成本地代码和 IL 与所有互操作位的混合体。正如你所说,这其中涉及很多魔法。
    【解决方案2】:

    旧版本的 LuaInterface 使用纯 P/Invoke 包装器。你可以用这个。

    还有一些替代品的尝试,包括我自己的。 http://github.com/jsimmons/LuaSharp

    【讨论】:

      【解决方案3】:

      对于所有正在阅读本文的人:使用 KopiLuaInterface! 在这里查看我的帖子:https://stackoverflow.com/a/21386450/1070906

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-31
        相关资源
        最近更新 更多