Cocos2dx -- 入门之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++。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- IFTTT开源Swift编写的帧动画框架--RazzleDazzle
- ruby – 如何判断是否已在模块名称空间中定义了Constant,而
- 为什么在C中展开多维数组是非法的?
- objective-c – 为什么这个NSInvocation会引发异常?
- ruby-on-rails – 使用Ruby on Rails安装CMS引擎. (机车)
- ruby – 如果使用any_instance,如何让stub返回调用它的实例
- ruby支持多重继承[closed]
- flash – 如何在ActionScript 3.0中获取数字的符号?
- Swift3.0编译动态Framework
- ruby-on-rails – 如何使用RubyMine进行远程调试?