在c++中嵌入lua的问题
problems embedding lua in c++
我试图在C++中嵌入lua代码,但遇到了一个奇怪的编译器错误。这是我的代码:
#include <stdio.h>
extern "C" {
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
}
int main() {
lua_State *luaVM = luaL_newstate();
if (luaVM == NULL) {
printf("Error initializing lua!n");
return -1;
}
luaL_openlibs(luaVM);
luaL_dofile(luaVM, "test.lua");
lua_close(luaVM);
return 0;
}
编译使用:
g++ -Wall -o embed -llua embed.cpp
错误为:
g++ -Wall -o embed -llua embed.cpp
/tmp/ccMGuzal.o: In function `main':
embed.cpp:(.text+0x47): undefined reference to `luaL_loadfilex'
embed.cpp:(.text+0x72): undefined reference to `lua_pcallk'
collect2: error: ld returned 1 exit status
我不是从我的代码中调用luaL_loadfilex
或lua_pcallk
,这有助于假设问题不在我的代码,而是在lua本身。这里有人有什么想法吗?
更新
这是我的版本信息:
$ lua -v
Lua 5.2.0 Copyright (C) 1994-2011 Lua.org, PUC-Rio
lua 5.2.1中的In luaL_dofile
是一个宏,其声明如下:
#define luaL_dofile(L, fn)
(luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0))
在您的lua版本中,它可能很好地用luaL_loadfilex
和lua_pcallk
实现,并且您会得到未定义的引用,如@Shahbaz所说。
5.1前的答案:根据本网站,如果包含lauxlib.h
和lualib.h
:,则需要在-llua
之后添加-llualib
g++ -Wall -o embed embed.cpp -llua -llualib
更新
愚蠢的我,你应该总是按照文件/lib使用另一个的顺序来链接它们。如果A
使用B
,则应在B之前提及A。
在您的情况下,由于embed.cpp
使用lua
,那么您应该写:
g++ -Wall -o embed embed.cpp -llua
最终的问题是库的名称因版本而异。从存储库安装时,库被称为liblua5.x
和liblualib5.x
,因此需要以下命令:
g++ -Wall -o embed embed.cpp -llua5.2 -llualib5.2
您可以使用:
cc embed.cpp -o embed -llua -L../lua -I../lua -lm -ldl
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- 在lua中重新定义打印函数时出现问题
- 在将Lua for Windows安装嵌入到C++程序中时遇到问题
- 在c++中嵌入lua的问题
- Lua 5.2 问题:"尝试从lua_pcall调用 nil 值"
- 链接到 Lua 5.2.4 时出现问题,即使在内联编译源代码时也是如此