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