c++ 调用lua

首先配置环境

1.先去下载一个lua源文件:http://www.lua.org

2.在Xcode中新建一个控制台应用程序,取名CppCLua

这里写图片描述

这里写图片描述

3.将第一步下载下来的文件解压,在终端中进入到解压目录下,输入make macosx,这样便可以生成Mac下面的lib文件。

4.接下来把刚刚解压缩的文件夹拷贝到你新建的工程下面,然后设置include路径和library路径。(注意,这里是不需要把头文件添加到Xcode里面的,只要指定include路径,编译的时候,编译器会自动去找的。)

这里写图片描述

因为我的Lua文件夹的路径是:

这里写图片描述

xxxx/CppCLua/lua-5.3.2,所以,我把search path和library path都别设置为:

$(SRCROOT)/CppCLua/lua-5.3.2/src

注意:如果直接添加lua的所有源码,则会编译报错。因为lua.c里面也有一个main函数。这个main函数是用来生成可执行程序的。 另外,如果是添加其它第三方的库,也可以参考这个方法,添加search path和library path

5.打开main.cpp,并包含以下头文件:

#include "lua.hpp"

如果此时编译不报错,则说明你之前设置的search path是正确的,如果报错,请自行调整search path。

跳转可以查看lua.hpp的内容,如下:

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

就是大多数Lua教程里的代码嘛。

6.在main.cpp里面添加以下内容:

#include "lua.hpp"

int foo(lua_State *L)
{
    int n = lua_tonumber(L, 1);

    lua_pushnumber(L, n + 1);

    return 1;
}


int main(int argc, const char * argv[]) {
    // 初始化lua虚拟机
    // 今后其他所有Lua Api函数的调用都需要此指针作为第一参数,用来指定某个虚拟机。
    lua_State * l = luaL_newstate();

    // 把所有标准类库加载到指定的虚拟机
    luaL_openlibs(l);

    // 把函数压入lua的栈,然后设置为全局变量,这样lua就可以调用它了。
    // 第二个参数是lua调用使用的函数名
    lua_register(l, "foo", foo);

    // 执行lua文件
    luaL_dofile(l, "hello.lua");

    //销毁指定虚拟机的所有对像
    lua_close(l);    return 0;
}

7.新建lua脚本:选择New->File->Other,然后命名为hello.lua, 以下是hello.lua里面的内容:

print(foo(100))

8.编译并运行

此时编译并运行,这时可能看不到控制台输出结果。因为你的Lua脚本没有拷贝到程序里面去,我们需要再设置一下。如下图所示: (注意:subpath要清空,copy only when installing去掉打勾)

这里写图片描述

编译并运行,运气好可以正常运行了输出结果

这里写图片描述

但是也可能报出了一大堆错误:

这里写图片描述

解决办法:

在Build Phases -> Link Binary With Libraries添加 liblua.a 文件,在你的lua文件夹下的src目录下:

这里写图片描述

这里写图片描述

最后工程目录如下:

这里写图片描述

编译运行,最后成功了,你已经掌握了第一课 使用C++调用lua。

下一课使用lua调用C++。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值