C++ 嵌入lua运行时错误:找不到符号:\u luaL\u newstate

C++ 嵌入lua运行时错误:找不到符号:\u luaL\u newstate,c++,lua,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

我的代码

编译选项:

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; 
}
还尝试了'-llua','-llualib',所有人都报告警告

obj.cxxflags = ["-g", "-D_FILE_OFFSET_BITS=64", "-D_LARGEFILE_SOURCE", "-Wall", "-llua-5.1"]
当我运行时,它会报告:

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

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

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

  • 编撰
  • 链接
  • 编译步骤使用
    obj.cxflags
    编译器标志。编译不需要库,因此在中传递链接器标志(
    -lfoo
    )没有任何用处-编译器根本不使用它们(因此出现警告)

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


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

    请看这个问题,您的版本系统是否有类似于
    obj.ldflags
    的设置?如果是这样,把库放在那里。@我不确定,实际上我是C++的NeWB,我尝试用节点WAF WAF编写一个节点插件。我会用谷歌搜索的。谢谢。@Mat你说得对,我使用的是
    obj.ldflags=['-llua']
    ,它是有效的,但我仍然不知道发生了什么以及为什么有效。@guilin桂林: 添加了一个简短的解释作为答案。
    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