为什么Lua报告lua_pushlstring未定义?

时间:2010-06-24 03:46:10

标签: c lua undefined-symbol

我设法为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有问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

构建Lua解释器时,需要导出Lua API符号。在Linux中,gcc的标志是-Wl,-E;也许这也适用于你的平台。