在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了


目录
相关文章
|
存储 算法 C++
Windows共享文件:探秘C++实现的B树索引算法奇境
在数字化时代,Windows共享文件的高效管理至关重要。B树算法以其自平衡多路搜索特性,在文件索引与存储优化中表现出色。本文探讨B树在Windows共享文件中的应用,通过C++实现具体代码,展示其构建文件索引、优化数据存储的能力,提升文件检索效率。B树通过减少磁盘I/O操作,确保查询高效,为企业和个人提供流畅的文件共享体验。
|
10月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
345 11
|
自然语言处理 编译器 C语言
为什么C/C++编译腰要先完成汇编
C/C++ 编译过程中先生成汇编语言是历史、技术和实践的共同选择。历史上,汇编语言作为成熟的中间表示方式,简化了工具链;技术上,分阶段编译更高效,汇编便于调试和移植;实践中,保留汇编阶段降低了复杂度,增强了可移植性和优化能力。即使在现代编译器中,汇编仍作为重要桥梁,帮助开发者更好地理解和优化代码。
为什么C/C++编译腰要先完成汇编
|
缓存 NoSQL 搜索推荐
【📕分布式锁通关指南 03】通过Lua脚本保证redis操作的原子性
本文介绍了如何通过Lua脚本在Redis中实现分布式锁的原子性操作,避免并发问题。首先讲解了Lua脚本的基本概念及其在Redis中的使用方法,包括通过`eval`指令执行Lua脚本和通过`script load`指令缓存脚本。接着详细展示了如何用Lua脚本实现加锁、解锁及可重入锁的功能,确保同一线程可以多次获取锁而不发生死锁。最后,通过代码示例演示了如何在实际业务中调用这些Lua脚本,确保锁操作的原子性和安全性。
914 6
【📕分布式锁通关指南 03】通过Lua脚本保证redis操作的原子性
|
存储 算法 安全
c++模板进阶操作——非类型模板参数、模板的特化以及模板的分离编译
在 C++ 中,仿函数(Functor)是指重载了函数调用运算符()的对象。仿函数可以像普通函数一样被调用,但它们实际上是对象,可以携带状态并具有更多功能。与普通函数相比,仿函数具有更强的灵活性和可扩展性。仿函数通常通过定义一个包含operator()的类来实现。public:// 重载函数调用运算符Add add;// 创建 Add 类的对象// 使用仿函数return 0;
359 0
|
自然语言处理 编译器 Linux
告别头文件,编译效率提升 42%!C++ Modules 实战解析 | 干货推荐
本文中,阿里云智能集团开发工程师李泽政以 Alinux 为操作环境,讲解模块相比传统头文件有哪些优势,并通过若干个例子,学习如何组织一个 C++ 模块工程并使用模块封装第三方库或是改造现有的项目。
1304 56
|
NoSQL Redis 数据库
Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
通过本文的介绍,我们详细讲解了 Lua 脚本在 Redis 中的作用、`eval` 命令的使用方法以及 `redis.call` 和 `redis.pcall` 的区别和用法。通过合理使用 Lua 脚本,可以实现复杂的业务逻辑,确保操作的原子性,并减少网络开销,从而提高系统的性能和可靠性。
1246 13
|
JSON Ubuntu 开发者
ubuntu 22安装lua环境&&编译lua cjson模块
通过上述步骤,可以在 Ubuntu 22.04 系统上成功安装 Lua 环境,并使用 LuaRocks 或手动编译的方式安装 lua-cjson 模块。本文详细介绍了每一步的命令和操作,确保每一步都能顺利完成,适合需要在 Ubuntu 系统上配置 Lua 开发环境的开发者参考和使用。
2189 13
|
监控 安全
公司用什么软件监控电脑:Lua 脚本在监控软件扩展功能的应用
在企业环境中,电脑监控软件对保障信息安全、提升效率至关重要。Lua 脚本在此类软件中用于扩展功能,如收集系统信息、监控软件使用时长及文件操作,向指定服务器发送数据,支持企业管理和运营。
383 6