【问题标题】:Lua library doesn't linkingLua库没有链接
【发布时间】:2020-11-15 15:32:23
【问题描述】:

当我尝试执行以下代码时得到undefined reference to 'luaL_openlibs'

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

int main(int argc, char *argv[])
{
    
    lua_State *L = luaL_newstate();
    luaL_openlibs(L);
    return 0;
}

这是我的 VSCode 任务文件:

{
    "tasks": [
        {
            "type": "shell",
            "label": "C/C++: g++.exe build active file",
            "command": "C:/MinGW/bin/g++.exe",
            "args": [
                "-g",
                "${workspaceFolder}\\src\\**.cpp",
                "-L",
                "${workspaceFolder}\\lib",
                "-o",
                "${workspaceFolder}\\debug\\game.exe",
                "-llua54"
            ],
            "options": {
                "cwd": "C:/MinGW/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ],
    "version": "2.0.0"
}

这些是我的文件

.
├── .vscode
│   ├── c_cpp_properties.json
│   └── launch.json
│   └── settings.json
│   └── tasks.json
├── debug
├── lib
│   ├── lauxlib.h
│   └── lua.h
│   └── lua.hpp
│   └── luaconf.h
│   └── lualib.h
│   └── liblua54.dll
│   └── liblua54.a
├── src
│   ├── main.cpp

如我所见,我为编译器指定了所有必要的参数。我完全是链接库的初学者,我不知道我错过了什么。

我也尝试将 liblua54.a 和 liblua54.dll 移动到调试文件夹,但没有帮助。

【问题讨论】:

  • 如果lualib.h 位于名为lib 的目录中,而不是lua,你为什么要做#include "../lua/lualib.h"? (对于其他标题也是如此)
  • 我只是在编写最小可重现示例时犯了一个错误。它是我程序中的 lib 文件夹。
  • 所以您在此处发布的最小可重现示例不是您实际尝试过的?请尝试使用您在此处发布的内容,看看是否还有问题。
  • 刚刚试了一下,还是一样的错误
  • 你自己编译了 Lua 库吗?如果是这样,怎么做?如果没有,你从哪里得到的?

标签: c++ lua g++ mingw linker-errors


【解决方案1】:

您混淆了 32 位和 64 位。如果您的 gcc 构建 32 位可执行文件,那么您需要使用来自 http://luabinaries.sourceforge.net/download.html 的 32 位二进制文​​件,而不是 64 位二进制文​​件。当我故意将它们混合在一起时,我得到了你得到的确切错误,当我使用正确的错误时,它编译得很好。

【讨论】:

    【解决方案2】:

    我希望在上面的args 中添加以下内容会有所帮助:

    ...
    "${workspaceFolder}\\lua",
    "-l",
    "-llua56",
     "-o",
    ...
    

    【讨论】:

    • -l 本身不会做任何事情,并且 OP 在选项列表中已经有 -llua54
    • @Someprogrammerdude:没错。
    猜你喜欢
    • 1970-01-01
    • 2016-03-15
    • 2014-03-14
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多