gpt4 book ai didi

c++ - 如何解决我在尝试通过 C++ 执行 Lua 文件时遇到的这个错误?

转载 作者:行者123 更新时间:2023-11-28 02:20:59 25 4
gpt4 key购买 nike

我正在尝试使用 C++ 执行一个 Lua 文件。

我正在运行 Mac OS X,Lua 5.3 位于/usr/local/include

当我尝试执行 Lua 文件时,出现以下错误:

Undefined symbols for architecture x86_64:
"lua_settop(lua_State*, int)", referenced from:
_main in lual-8d0dcd.o
"luaopen_base(lua_State*)", referenced from:
main::lualibs in lual-8d0dcd.o
"luaL_newstate()", referenced from:
_main in lual-8d0dcd.o
"lua_close(lua_State*)", referenced from:
_main in lual-8d0dcd.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是 C++ 文件:

#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>

int main(int argc, char* argv[]) {

lua_State *lua_state;
lua_state = luaL_newstate();

static const luaL_Reg lualibs[] = {
{ "base", luaopen_base },
{ NULL, NULL}
};

const luaL_Reg *lib = lualibs;
for(; lib->func != NULL; lib++) {
lib->func(lua_state);
lua_settop(lua_state, 0);
}

luaL_dofile(lua_state, "helloworld.lua");

lua_close(lua_state);

return 0;
}

谁能帮帮我?

谢谢。

最佳答案

您需要在您的包含项周围添加一个 extern "C" block :

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

原因是 Lua 是用 C 编写的,因此通过简单地使用函数名称作为符号名称来导出函数的“C 方式”。您的 C++ 程序希望符号以“C++ 方式”命名,其中包括编码类型信息。 extern "C" block 强制使用 C 风格的符号命名。

正如@ChrisBeck 所建议的,您只需将 Lua 源代码添加到您的项目中,然后像编译 C++ 一样编译它们。然后函数将以 C++ 风格的名称导出。

关于c++ - 如何解决我在尝试通过 C++ 执行 Lua 文件时遇到的这个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32491131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com