在windows C++中编译并使用Lua脚本1

简介: 早前就用过LUA ,只是局部的小项目使用,突然兴起想要写一些关于LUA 的  文章,记录曾经学习过的点点滴滴。 这里我使用的是LUA5.2作为 案例 lua做为轻量级脚本语言已经被广泛应用到应用软件以及游戏开发中,相比Perl以及python  lua的内核 只有100KB左右 可以很...

早前就用过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了


目录
相关文章
|
25天前
|
安全 编译器 C++
【C++20概念】编译时多态性的力量
【C++20概念】编译时多态性的力量
46 0
|
16天前
|
人工智能 机器人 编译器
【C++】Windows端VS code中运行CMake工程(手把手教学)
【C++】Windows端VS code中运行CMake工程(手把手教学)
|
1月前
|
Unix 编译器 开发者
Qt5.14.2 轻松掌握Qt中的压缩与解压缩:QuaZIP的神秘面纱与实战演练之windows环境编译
Qt5.14.2 轻松掌握Qt中的压缩与解压缩:QuaZIP的神秘面纱与实战演练之windows环境编译
|
11天前
|
人工智能 机器人 C++
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
|
7天前
|
Windows
【Windows】 手写脚本更快编辑hosts文件
【Windows】 手写脚本更快编辑hosts文件
9 0
|
13天前
|
NoSQL Java Redis
lua脚本做redis的锁
这段内容是关于使用Redis实现分布式锁的Java代码示例。`RedisLock`类包含`lock`和`unlock`方法,使用`StringRedisTemplate`和Lua脚本进行操作。代码展示了两种加锁方式:一种带有过期时间,另一种不带。还提到了在加锁和解锁过程中的异常处理,并提供了相关参考资料链接。
17 3
|
15天前
|
存储 NoSQL 数据处理
Redis Lua脚本:赋予Redis更强大的逻辑与功能
Redis Lua脚本:赋予Redis更强大的逻辑与功能
|
23天前
|
算法 编译器 程序员
深入理解C++编译模式:了解Debug和Release的区别
深入理解C++编译模式:了解Debug和Release的区别
59 2
|
24天前
|
算法 编译器 C++
【C++ 泛型编程 中级篇】C++ 编译时技术:探索 if constexpr 和 std::enable_if
【C++ 泛型编程 中级篇】C++ 编译时技术:探索 if constexpr 和 std::enable_if
36 0
|
24天前
|
安全 算法 编译器
【C++ 静态断言的技巧】掌握C++中static_assert的力量:深入探讨编译时检查
【C++ 静态断言的技巧】掌握C++中static_assert的力量:深入探讨编译时检查
41 1

热门文章

最新文章