問題:
$ 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 doc は、pcallk が pcall と同じことを行うと言っているようですが、譲歩できるという利点がありますが、pcall は引き続き使用できるはずです...
更新: 古い (5.1?) ヘッダーを使用して 5.2 にリンクしようとしていることに気付きました...どのヘッダーが必要かを示すリストがどこにあるか知っている人はいますか? Lua ソースのすべてのヘッダーは必要ありません。
ここで見たことから、5.2 では pcall が を使用して実装されていると推測できます_lua_pcallk
。