首页 > 技术文章 > 在windows C++中编译并使用Lua脚本

yuedongwei 2014-12-05 01:56 原文

早前就用过LUA ,只是局部的小项目使用,突然兴起想要写一些关于LUA 的  文章,记录曾经学习过的点点滴滴。

这里我使用的是LUA5.2作为 案例

lua做为轻量级脚本语言已经被广泛应用到应用软件以及游戏开发中,相比Perl以及python  lua的内核 只有100KB左右

可以很容易嵌入到语言级别 就好像语言本身的功能一样

以下来自百度全科:

Lua还具有其它一些特性:同时支持面向过程(procedure-oriented)编程和函数式编程(functional programming);自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程 [4] ,并非操作系统所支持的线程)支持;通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象虚函数继承重载等。

关于什么是闭包?以及如何使用闭包在下面这边文章中有 javascript对应的闭包问题。相信很多前端工程师并不陌生

闭包由于优缺点一直都是对半存在所以很多人是不建议程序中使用闭包的。

http://www.cnblogs.com/jeffwongishandsome/archive/2009/05/17/1458405.html 关于闭包的介绍

废话不多说,要使用LUA首先就要编译 LUA的内核,linux下相当简单

make 

make install 就完事

windows下编译过程如下

如果你要编译静态库?

vs2010下首先创建如下 项目,记住去掉预编译头,因为lua是用C ,混合C/C++会造成预编译头冲突

创建不适用预编译头的 静态库 ,

导入lua代码到项目文件,选择你的lua代码导入  直接生成即可

如果你要编译动态库?

基本步骤同上相同 你在创建的时候创建一个dll项目 , 或者 直接修改项目属性 生成dll

你现在编译是编译不过的 ?你要去掉你的预编译选项!!!  不使用项目预编译头

这个时候你编译 OK通过了 也生成了 DLL ,那么问题来了 现在  咋没有生成.lib输入库呢!!!

实际上发现LUA内核导出函数都被声明为LUA_API开头

你需要添加几个预编译定义

LUA_BUILD_AS_DLL  这个告诉预处理器 代码按照DLL编译  并且定义导入导出

LUA_CORE      这个告诉预处理器 LUA_API 宏添加 上 dllexport导出定义   如果不添加就是直接使用dllimport

源代码如下

 1 #if defined(LUA_BUILD_AS_DLL)    /* { */
 2 
 3 #if defined(LUA_CORE) || defined(LUA_LIB)    /* { */
 4 #define LUA_API __declspec(dllexport)
 5 #else                        /* }{ */
 6 #define LUA_API __declspec(dllimport)
 7 #endif                        /* } */
 8 
 9 #else                /* }{ */
10 
11 #define LUA_API        extern
12 
13 #endif                /* } */

OK  到这里 你的LUA内核已经编译完了 可以开始学习LUA了

 

推荐阅读