在C++中使用Lua
我正在尝试在C++中使用Lua,但是我无法编译我的代码。我使用最新版本的Lua,目前是5.3。我的IDE是Code::Blocks。到目前为止,我一直在按照这些指南进行操作: https://eliasdaler.wordpress.com/2013/10/11/lua_cpp_binder/ http://gamedevgeek.com/tutorials/getting-started-with-lua/
但是它们都没有详细解释如何在C::B中设置Lua。我从Lua的网站下载了二进制压缩包和源代码。我不确定从src文件夹中应该放置哪些文件。到目前为止,我已将lauxlib.h、lua.h、luaconf.h以及lualib.h放入include目录,并在main.cpp中使用以下代码:
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
到目前为止,我只是尝试运行以下简短的代码片段:
lua_State* L;
L = luaL_newstate();
luaL_openlibs(L);
luaL_dofile(L, "test.lua");
lua_close(L);
但我总是在第一行遇到错误。目前我收到的错误是‘luaL_newstate’的引用未定义。
也许我应该从源文件夹中将一些文件放入库目录中?或者在‘项目构建选项’菜单中的‘其他链接器选项’中添加一些内容?
编辑:
在此期间,我找到了这个问题: Lua 5.3 undefined references
看起来我需要将-llua放入‘其他链接器选项’中,但是lua.org中的包中没有.a、.so或.lib文件。
LUA和C++的hello world示例
main.cpp
#include <iostream>
#ifdef __cplusplus
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
#endif //__cplusplus
int main(int argc, char **argv) {
std::cout << "LUA is saying: ";
lua_State* L;
L = luaL_newstate();
lua_pushstring(L, "Anna");
lua_setglobal(L, "name");
luaL_openlibs(L);
if(luaL_dofile(L, "hello.lua")) {
std::cout << "Final:" << lua_tostring(L, -1) << "\n";
}
lua_close(L);
}
hello.lua
print("Hello World!")
print("Hello", name)
Makefile
hello: main.cpp
g++ -I/usr/include/lua5.3/ main.cpp -llua5.3 -o hello
该示例创建了一个新的lua_State,它是主要上下文,将由lua引擎用于执行代码。
作为下一步,我们需要打开库,并如果需要添加将由lua使用的其他库。
在执行之前,我们可以在全局上下文中设置变量,这些变量可以通过将值推到堆栈上并调用lua_setglobal()来设置全局变量而访问变量。
最后,我们使用助手函数luaL_dofile(),它将执行文件并返回false(0)(如果没有错误),或true(1)(如果有错误)。如果出现错误,则状态中堆栈的最后一个值将是错误描述。
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
我终于成功让问题中提到的代码运行了。以下是我的做法:
我没有从 Lua 的官网下载源代码,而是下载了最新的 LuaDist。这个网站也可以在 Lua.org 的下载页面的二进制类别下找到。
在那个压缩包里,有通常的 include 和 lib 文件夹。
我将这两个文件夹都复制到了相应的文件夹中,并在 Build 选项菜单下设置了编译器和链接器的路径。
然后,在链接器设置选项卡下,我添加了 lib 文件夹中的 liblua.dll.a 文件。关于这最后两步,你可以在 SFML 设置页面中找到额外的帮助。
最后一步,我将 liblua.dll 文件放在编译好的可执行文件旁边。