问题:
$ 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,您不需要重新编译,只需重新链接即可。
当然,在所有情况下,请确保使用一致的 header 和库,即不要混合来自不同版本或发行版的 header 和库。
关于c++ - lua_pcall 去哪儿了? (OSX Lion 上的 Lua 5.2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10959017/