gpt4 book ai didi

c++ - lua_pcall 去哪儿了? (OSX Lion 上的 Lua 5.2.0)

转载 作者:搜寻专家 更新时间:2023-10-31 01:14:45 25 4
gpt4 key购买 nike

问题:

$ clang++ -L../lib/osx/ -I../include/ -o test Script.cpp Main.cpp Verbose.cpp -llua -lUnitTest++
Undefined symbols for architecture x86_64:
"_lua_pcall", referenced from:
LuaSystem::dostring(char const*) in Script-EgY0dM.o
(maybe you meant: _lua_pcallk)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

让我们看看我的 lua 构建:

$ cd src/
stevenlu443@steven-mba(Jun 09 02:41:58)[~/Downloads/lua-5.2.0/src]
$ ls
Makefile lcorolib.c ldump.o llex.o lopcodes.o ltable.c luac.c
lapi.c lcorolib.o lfunc.c llimits.h loslib.c ltable.h luac.o
lapi.h lctype.c lfunc.h lmathlib.c loslib.o ltable.o luaconf.h
lapi.o lctype.h lfunc.o lmathlib.o lparser.c ltablib.c lualib.h
lauxlib.c lctype.o lgc.c lmem.c lparser.h ltablib.o lundump.c
lauxlib.h ldblib.c lgc.h lmem.h lparser.o ltm.c lundump.h
lauxlib.o ldblib.o lgc.o lmem.o lstate.c ltm.h lundump.o
lbaselib.c ldebug.c liblua.a loadlib.c lstate.h ltm.o lvm.c
lbaselib.o ldebug.h linit.c loadlib.o lstate.o lua lvm.h
lbitlib.c ldebug.o linit.o lobject.c lstring.c lua.c lvm.o
lbitlib.o ldo.c liolib.c lobject.h lstring.h lua.h lzio.c
lcode.c ldo.h liolib.o lobject.o lstring.o lua.hpp lzio.h
lcode.h ldo.o llex.c lopcodes.c lstrlib.c lua.o lzio.o
lcode.o ldump.c llex.h lopcodes.h lstrlib.o luac
stevenlu443@steven-mba(Jun 09 02:41:59)[~/Downloads/lua-5.2.0/src]
$ nm liblua.a | grep _lua_pcall
115:0000000000001a30 T _lua_pcallk
116:0000000000003b40 S _lua_pcallk.eh
1563: U _lua_pcallk
1839: U _lua_pcallk
stevenlu443@steven-mba(Jun 09 02:42:12)[~/Downloads/lua-5.2.0/src]
$ nm *.o | grep _lua_pcall
115:0000000000001a30 T _lua_pcallk
116:0000000000003b40 S _lua_pcallk.eh
597: U _lua_pcallk
977: U _lua_pcallk
2630: U _lua_pcallk
2760: U _lua_pcallk

为什么_lua_pcall不存在? 5.2 文档似乎说 pcallk 与 pcall 一样,但具有能够产生的好处,但 pcall 应该仍然可用......

更新:我刚刚意识到我正在尝试使用旧的(5.1?) header 链接到 5.2...有人知道哪里有一个列表说明哪些 header 是必需的吗?我不需要 Lua 源代码中的所有 header 。

从我们在这里看到的可以推断,在 5.2 中 pcall 是使用 _lua_pcallk 实现的。

最佳答案

要编译使用 Lua C API 的程序,您需要包含 lua.h,通常还包含 lauxlib.h,有时还包含 lualib.h.

当你更改 Lua 的版本时,比如从 5.1 到 5.2,你需要重新编译你的程序。当您更改相同版本的发布时,例如从 5.1.4 到 5.1.5,您不需要重新编译,只需重新链接。

当然,在所有情况下,请确保您使用一致的头文件和库,即不要混用来自不同版本或发行版的头文件和库。

关于c++ - lua_pcall 去哪儿了? (OSX Lion 上的 Lua 5.2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10959017/

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