C++与Lua交互(一)
引言
之前做手游项目时,客户端用lua做脚本,基本所有游戏逻辑都用它完成,玩起来有点不爽,感觉“太重”了。而我又比较偏服务端这边(仅有C++),所以热情不高。最近,加入了一个端游项目,客户端和服务器都用了lua,各种玩法是让我眼界大开。在此,写下自己的心得与体会,希望能与大家共同探讨进步。
环境搭建
lua官网下载lua源代码,我们将用它来编译静态库,解释器,以及动态库。
CMake官网下载最新的安装包,我们将用它来作为搭建solution的工具。
集成开发环境为VS2012,整个的编码以及测试工作,将借助它来完成。
创建solution
将下载好的lua源码解压好后,得到如图所示目录,我们在src目录下,创建一个名为CMakeLists.txt的文本文件。
根据doc目录下的readme的说明,我们编写如下内容,来建立静态库:
可以看到,建立library需要框出的所有.c文件,建立interpreter需要library文件加上lua.c,至于最后的compiler,我略去不表。
整个的CMakeLists.txt文件内容如下:
project(LuaTest)
include_directories(AFTER ${CMAKE_SOURCE_DIR})
##########lua静态库############################################
set(LIB_FILES lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c loadlib.c linit.c)
source_group("\\libFiles" FILES ${LIB_FILES})
add_library (LuaLib STATIC ${LIB_FILES})
###########c++与lua交互###################
add_executable(LuaWithCPPTest source.cpp)
target_link_libraries(LuaWithCPPTest LuaLib)
############lua解释器###########
add_executable(LuaInterpreter lua.c ${LIB_FILES})
#ADD_DEFINITIONS(-LUA_LIB -LUA_BUILD_AS_DLL)
######################################define LUA_LIB##################################################
######################################define LUA_BUILD_AS_DLL#########################################
写好CMakeLists.txt后,我们打开安装好的CMake工具,我们需要选中source code目录和build the binaries目录,整个结构看起来如下:
点击configure,再点击finish即可,我们无需改动编译器选项。
配置好后,点击旁边的Generate。一切ok后,我们便构造好了我们的solution。
打开LuaTest.sln后,我们有5个项目,其生成的ALL_BUILD和ZERO_CHECK这两个项目我们不必关心。LuaInterpreter是lua解释器的项目,LuaLib是lua静态库项目,LuaWithCPPTest是C++与lua交互的项目。
将LuaInterpreter设为启动项运行,得如下结果:
将LuaWithCPPTest设为启动项运行(注意,在这之前必须运行LuaLib生成静态库,这个项目依赖LuaLib的静态库,其依赖关系由CMakeLists.txt里写明生成,具体可观察LuaWithCPPTest的项目属性),我们得到如下输出:
至此,整个环境搭建成功。 Enjoy it!
总结
CMake是个非常好用的生成解决方案的工具,通过它,我们可以以最少的改动来生成我们想要的解决方案。工欲善其事,必先利器。有了CMake这个利器,配合github,我们可以仅用几个文本文件在任何联网的机器上组织好我们的代码!
忘了注明自己写的source.cpp文件了,请下载解压到lua的src文件夹下。
C++与Lua交互(一)的更多相关文章
- C++与Lua交互(四)
引言 通过前几篇,我们已经对Lua的C API有了一定的了解,如lua_push*.lua_is*.lua_to*等等.用C++调用Lua数据时,我们主要运用lua_getglobal与lua_pus ...
- C++与Lua交互之配置&交互原理&示例
|Lua 简介 Lua 是一种轻量小巧的脚本语言,也是号称性能最高的脚本语言,它用C语言编写并以源代码形式开放. 某些程序常常需要修改内容,而修改的内容不仅仅是数据,更要修改很多函数的行为. 而修改函 ...
- C++与Lua交互(三)
通过上一篇的热身,我们对C++调用lua变量有了一个认识,现在让我们再深入一点,去探索一下如何调用lua的函数.表. Lua与宿主通讯的关键--栈 lua是个动态脚本语言,它的数据类型如何映射到C++ ...
- C++与Lua交互(二)
上一篇我们搭建好了整个的项目环境,现在,我们一起探索一下如何将lua寄宿到C++中. 宿主的实现 我们在LuaWithCPPTest项目下,查看Source.cpp代码如下: #include < ...
- 最优雅的C++跟lua交互.
我先来吐槽一下我们这个项目. 我是做手机游戏的, cocos2dx引擎, lua编码. 这本来是一件很欢快的事情, 因为不用接触C++. C++写久了的人写lua, 就会感觉任督二脉被打通了, 代码写 ...
- C++与lua交互
项目开发的脚本层用的是Lua,引擎用的是C++.但是经理不给开放引擎层的代码.刚好最近项目空闲,安排了学习C++跟Lua的通信. 一.C++与Lua数据交互 数据交互主要是通过C API来实现 首先, ...
- Linux下C/C++和lua交互-Table
本来这些文章都是在我的个人网站www.zhangyi.studio,目前处在备案状态,暂时访问不了,所以搬到这边. 最近这两天需要弄清楚C++和lua间相互调用和数据传递,废话不多说,直接上过程. ...
- Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解
这是第二篇 Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程 这是前面的第一篇,详细的说明了怎样添加内购项目以及填写银行信息提交以及沙盒测试员的添加使用以及需要我们注意的东西,结 ...
- 教程二 网页和lua交互修改openwrt
硬件 http://zhan.renren.com/h5/entry/3602888498044209332 GL-iNet 1 首先安装 webserver之lighttpd ,openwrt自带 ...
随机推荐
- goldengate的HANDLECOLLISIONS参数
HANDLECOLLISIONS 是一个 replicat 进程参数,主要在 initial load 中使用. 在 replicat 进程中使用该参数时,即使目标数据库环境中存在数据完整性问题(如 ...
- 现在的SEO最须要会点啥
如今的SEO最须要会点啥,会飞天,会遁地,NONONO,不须要你这么流弊,咳咳,不瞎扯.在以往SEO的就是从搜索引擎中获取免费流量.是啊,曾经多好弄啊.而如今在我们不但须要流量还须要把流量进行转换,毕 ...
- SON-RPC for Java
JSON-RPC for Java https://github.com/briandilley/jsonrpc4j#json-rpc-for-java This project aims to pr ...
- SAP BW 重新初始化
- linux进程后台运行的几种方法
转载:http://hi.baidu.com/ntuxmzvdpzbnuxq/item/79131b93f606a348f0421562 我 们经常会碰到这样的问题,用 telnet/ssh 登录了远 ...
- CentOS中TFTP配置
转载:http://www.centoscn.com/image-text/config/2013/1105/2062.html TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现 1 ...
- c实例_挑战程序竞赛,蚂蚁
#include <stdio.h> //蚂蚁的题目 int max(int a,int b) { int count; count=a>b?a:b; return count; } ...
- Face The Right Way
Face The Right Way Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 2564 Accepted: 117 ...
- CSS完成三角形
通过设置div的border属性,来实现! 将div的height和width属性分别设置为0px,将4边的border值设置为一样的宽度,通过调节边框的颜色课看到效果. <style> ...
- 安卓Design包之TabLayout控件的使用
转自: 安卓Design包之TabLayout控件的简单使用 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的Android ...