我设法为Palm webOS编译Lua 5.1.4,现在我正在尝试编写一个扩展来使用来自Lua的webOS服务。但是,当我尝试加载我的库时,Lua报告:
undefined symbol: lua_pushlstring
这是我的代码:
#define LUA_LIB
#include "lua.h"
#include "lauxlib.h"
static int hellopalm(lua_State *L) {
lua_pushliteral(L, "Hello, Palm!");
return 1;
}
static const luaL_reg palmlib[] = {
{ "hellopalm", hellopalm },
{ NULL, NULL }
};
LUALIB_API int luaopen_palm(lua_State *L) {
luaL_register(L, "palm", palmlib);
return 1;
}
这是我的Makefile:
LUADIR= ../lua-5.1.4/lua-webos
CC= arm-none-linux-gnueabi-gcc
CFLAGS= -O2 -Wall -shared -nostdlib -mcpu=arm1136jf-s -mfpu=vfp -mfloat-abi=softfp
INCLUDES= -I$(LUADIR)/include
RM= rm -f
LIBNAME= palmlib.so
SOURCES= palmlib.c
default: $(LIBNAME)
clean:
$(RM) $(LIBNAME)
$(LIBNAME): palmlib.c
$(CC) $(CFLAGS) $(INCLUDES) $(SOURCES) -o $@
我知道lua_pushliteral
只是一个调用lua_pushlstring
的宏,所以这就是错误的来源。 push_*
变种似乎根本不起作用。我怀疑Makefile有问题。
有什么想法吗?
答案 0 :(得分:2)
构建Lua解释器时,需要导出Lua API符号。在Linux中,gcc的标志是-Wl,-E;也许这也适用于你的平台。