2012-06-09 1 views
2

Проблема:Куда отправился lua_pcall? (Lua 5.2.0 на OSX Lion)

$ 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/ 
[email protected](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 
[email protected](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 
[email protected](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.2 с использованием старых (5.1 ?) заголовки ... Кто-нибудь знает, где есть список, в котором говорится, какие заголовки необходимы? Мне не нужны все заголовки из источника Lua.

Мы можем заключить, что мы видели здесь, что в 5.2 pcall реализовано с использованием _lua_pcallk.

ответ

4

Чтобы скомпилировать программы, которые используют API Lua C, вам необходимо включить lua.h и часто также lauxlib.h, а иногда и lualib.h.

Когда вы меняете версию Lua, скажем, от 5.1 до 5.2, вам необходимо перекомпилировать свою программу. Когда вы меняете выпуски той же версии, скажем, с 5.1.4 до 5.1.5, вам не нужно перекомпилировать, просто перемотать.

Конечно, во всех случаях убедитесь, что вы используете согласованные заголовки и библиотеки, то есть не смешивайте заголовки и библиотеки из разных версий или выпусков.

+0

Отличный ответ, спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^