【问题标题】:Problems with linking lua statically静态链接lua的问题
【发布时间】:2013-05-08 04:04:48
【问题描述】:

我正在尝试使用 VS2012 将 lua 静态链接到我的 C++ 应用程序中。我从 sourceforge 下载了 vs11_lib 文件,并为这个文件 lua52.lib 添加了链接器依赖项。我现在在尝试编译时遇到各种链接错误,我很确定我错过了一步。同样,我是静态地执行此操作,因为我希望我的应用程序独立运行。任何指针将不胜感激!

【问题讨论】:

    标签: linker lua static-libraries


    【解决方案1】:

    最好的方法是自己构建可嵌入的 Lua。下载你想要的版本的源文件,在VS2012中创建一个静态库项目,复制源文件(*.h和*.c到VS项目,不是VS解决方案)并将所有源文件添加到项目中,除了luac.clua.c,它们是独立可执行文件而不是嵌入式库所必需的(无论如何它们在一个项目中相互冲突)。

    之后编译发布版本,你就得到了可以链接的 lua5.x.lib。如果它仍然不起作用,那么问题可能是您在错误的位置添加了链接器依赖项。

    【讨论】:

    • 如果您使用的是 Lua 5.1,也请忽略 print.c
    • 但这应该与 lua 二进制文件中可用的相同吧?
    • 是和不是。是的,因为它应该可以工作,不,因为性能可能会有所不同。我实际上进行了一个小测试,仅创建/销毁一个表就进行了 2 亿次迭代。下载的版本21秒,vs编译的19秒。
    【解决方案2】:

    Lua 源代码可以编译为 C 或 C++。我认为您尝试使用的 lib 文件被编译为 C,并且您将它们的头文件包含为 C++。结果将是函数的名称不同;因此,链接错误。

    如果您在 C++ 文件中使用 C lib,请像这样包装 lib 的标头:

    extern "C" {
        #include "lua.h"
        #include "lualib.h"
        #include "lauxlib.h"
    }
    

    有关在 Visual Studio 中使用 Lua 的更详细说明,请参阅article

    更新:

    正如@lhf 在评论中所说,Lua 的较新发行版提供了一个 C++ 标头 lua.hpp,它做同样的事情。它在 PIL 中针对较旧的发行版进行了描述。

    【讨论】:

    • 使用lua.hpp=,它是源分发自带的。
    • 对,我当然会这样做。我使用的唯一二进制文件是 lua5.1.lib。我应该补充一点,文件大小相当小,640kb。我应该使用其他一些二进制文件吗?
    • 不,Lua 非常小。这似乎是 64 位库。那么你需要32位库吗?你看到了什么错误?
    • @ChristopherBrown 正如 Tom Blodget 指出的那样,您很可能已经链接到 64 位版本。
    • 奇怪!它适用于 32!我运行的是 64 位系统,为什么我不能使用 64 位版本?
    猜你喜欢
    • 2011-09-20
    • 2012-07-26
    • 2015-07-20
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 2018-06-26
    • 1970-01-01
    相关资源
    最近更新 更多