【问题标题】:Linker can't find Lua library definition链接器找不到 Lua 库定义
【发布时间】:2019-09-17 04:44:15
【问题描述】:

所以,我对 C++ 比较陌生,我一直在尝试在我的 C++ 项目中运行 Lua 文件。首先,我运行了这个简单的代码:

#include <iostream>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#include <stdlib.h>
#include <stdio.h>

int main() {
    std::cout << "Lua Console";

    lua_State *L;
    L = luaL_newstate();

    char ch;
    std::cin >> ch;
    return 0;
}

终端命令如下所示:

g++ main.cpp -L lib/liblua.a

编辑:更正此

g++ main.cpp -Llib -llua

Lua 库安装在我的系统 (Linux) 上,但链接器找不到 luaL_newstate() 的定义,尽管我在命令行中包含了该库:

main.cpp:(.text+0x2b): undefined reference to `luaL_newstate()'

这发生在任何 Lua 函数中。我真的不知道出了什么问题,到目前为止,在 Linux 中导入库非常简单。这似乎是我不熟悉在我的项目中使用库的问题,但我找不到非常有用的文档。提前谢谢你。

【问题讨论】:

  • 所以这个问题已经解决了,但是还需要澄清一下;发生此问题是因为我将 Lua 库构建为 C 并在 C++ 中使用它。一个技巧肯定是用 extern "C" 包装所有这些头文件,但是,Lua 文档建议您应该简单地使用 "#include ",该头文件已经包含 extern 并且包含在 Lua 库安装头文件中。

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


【解决方案1】:

-L 选项指定保存库文件的文件夹;试试g++ main.cpp -Llib -llua

还将 Lua 标头的 #include 包装到 extern "C"

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

【讨论】:

  • 感谢您的澄清。然而,问题似乎仍然存在。
  • 您必须添加 -v 选项才能查看有关确切链接器命令的详细信息,以便我们可以看到提供的路径。能否将 lib/liblua.a 复制到本地文件夹,看看是否有帮助?
  • 也试过了,但没有运气。还尝试将 .a 库复制到 /usr/lib。控制台信息如下:pastebin.com/CHgkkSsi
  • 尝试将 Lua 标头的 #include 包装到 extern "C": extern "C" { #include &lt;lualib.h&gt; #include &lt;lauxlib.h&gt; #include &lt;lua.h&gt; }
  • 我建议使用#include &lt;lua.hpp&gt;,而不是使用extern "C"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 2017-05-30
相关资源
最近更新 更多