2

问题:

$ 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?)标头链接到 5.2... 有人知道哪里有一个列表说明哪些标头是必要的吗?我不需要来自 Lua 源的所有标题。

我们可以从这里看到的内容推断,在 5.2 中 pcall 是使用_lua_pcallk.

4

1 回答 1

4

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

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

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

于 2012-06-09T11:27:03.927 回答