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 doc は、pcallk が pcall と同じことを行うと言っているようですが、譲歩できるという利点がありますが、pcall は引き続き使用できるはずです...

更新: 古い (5.1?) ヘッダーを使用して 5.2 にリンクしようとしていることに気付きました...どのヘッダーが必要かを示すリストがどこにあるか知っている人はいますか? Lua ソースのすべてのヘッダーは必要ありません。

ここで見たことから、5.2 では pcall が を使用して実装されていると推測できます_lua_pcallk

4

1 に答える 1

4

lua.hLua C API を使用するプログラムをコンパイルするには、頻繁に とを含める必要がありlauxlib.hますlualib.h

Lua のバージョンを 5.1 から 5.2 に変更した場合、プログラムを再コンパイルする必要があります。同じバージョンのリリースを、たとえば 5.1.4 から 5.1.5 に変更する場合、再コンパイルする必要はなく、再リンクするだけです。

もちろん、どのような場合でも、必ず一貫したヘッダーとライブラリを使用してください。つまり、異なるバージョンまたはリリースのヘッダーとライブラリを混在させないでください。

于 2012-06-09T11:27:03.927 に答える