嵌入lua运行时错误:未找到符号:_luaL_newstate

时间:2011-12-18 16:07:47

标签: c++ lua

我的代码

inline int DOFILE(string& filename) {

  printf("lua_open\n");
  /* initialize Lua */
  lua_State* L = lua_open();

  printf("lua_openlibs\n");
  /* load Lua base libraries */
  luaL_openlibs(L);

  printf("lua_dofile\n");
  /* run the script */
  int ret = luaL_dofile(L, filename.c_str());

  printf("lua_close\n");
  /* cleanup Lua */
  lua_close(L);

  return ret; 
}

编译选项:

obj.cxxflags = ["-g", "-D_FILE_OFFSET_BITS=64", "-D_LARGEFILE_SOURCE", "-Wall", "-llua-5.1"]

还尝试过' -llua' -llualib',所有人都报告警告

i686-apple-darwin11-llvm-g++-4.2: -llua-5.1: linker input file unused because linking not done

当我跑步时,报告:

lua_open
dyld: lazy symbol binding failed: Symbol not found: _luaL_newstate
  Referenced from: /Users/gl/workspace/node-lua/build/Release/node_lua.node
  Expected in: flat namespace

dyld: Symbol not found: _luaL_newstate
  Referenced from: /Users/gl/workspace/node-lua/build/Release/node_lua.node
  Expected in: flat namespace

1 个答案:

答案 0 :(得分:1)

您应该使用库的obj.ldflags参数。

您正在使用的构建工具分两步生成二进制文件:

  1. 编译
  2. 链接
  3. 编译步骤使用obj.cxxflags编译器标志。编译时不需要库,因此在其中传递链接器标志(-lfoo)没有用处 - 编译器根本不使用它们(因此警告)。

    链接步骤应同时使用obj.cxxflagsobj.ldflags。 (ld是链接器的名称。)

    非常简单的代码同时进行编译和链接的情况并不少见,例如使用g++ -o thing thing.cpp -lpthread。但对于较大的版本,分离编译和链接是很常见的。 )