VIsual Studio内引用Lua解释器,编译Lua源码,执行Lua脚本

news2024/11/18 21:26:02
前言
本篇在讲什么

在Visual Studio中引入lua的解释器
使用C++调用Lua文件

本篇适合什么

适合初学Lua的小白
适合需要C/C++和lua结合开发的人

本篇需要什么

Lua语法有简单认知
C/C++语法有简单认知
依赖Lua5.1的环境
依赖VS 2017编辑器

本篇的特色

具有全流程的图文教学
重实践,轻理论,快速上手
提供全流程的源码内容


★提高阅读体验★

👉 ♠ 一级标题 👈

👉 ♥ 二级标题 👈

👉 ♣ 三级标题 👈

👉 ♦ 四级标题 👈


目录

  • ♠ 引入本地Lua环境
    • ♥ 确认本地是否存在环境
    • ♥ 找到Lua安装目录
    • ♥ 描述文件和lib库
    • ♥ 新建C++空项目
    • ♥ 引入头文件和库
    • ♥ 测试用例
  • ♠ 引外部下载的Lua环境
    • ♥ 下载文件
    • ♥ 引入文件
  • ♠ 编译Lua源码后引入
    • ♥ 下载Lua源码
    • ♥ 创建静态库项目
    • ♥ 拷贝源码
    • ♥ 不使用预编译头
    • ♥ 注释main方法
    • ♥ 添加预处理器定义标记
    • ♥ 生成编译文件
    • ♥ 整合编译文件
  • ♠ 推送
  • ♠ 结语


♠ 引入本地Lua环境

如果你的电脑已经安装了Lua,那么有现成的Lua解释器可以引入,这个方案必须是你本地环境已经安装好lua的情况下才可以使用


♥ 确认本地是否存在环境

在这里插入图片描述

打开cmd,输入Lua,如果有版本输出,就已经安装了Lua


♥ 找到Lua安装目录

如果忘记路径了,可以在环境变量内找到Lua的路径

在这里插入图片描述


♥ 描述文件和lib库

在这里插入图片描述

  • include:下包含几个重要的头文件

在这里插入图片描述

  • lib:编译好的lua源码库

在这里插入图片描述


♥ 新建C++空项目

我们通过Visual Studio创建一个C++的空项目

在这里插入图片描述

注:需要安装c++桌面开发的相关环境才行


♥ 引入头文件和库

第一步右键解决方案下的目录,打开属性页

在这里插入图片描述

第二步在C/C++下找到常规,在附加包含目录内添加上我们刚才lua下的include文件夹目录

在这里插入图片描述

第三步,在连接器输入选项下,在附加依赖项填入lib文件夹里lua5.1.lib的名字

在这里插入图片描述

第四步,在链接器常规选项下,在附加库目录内补充lib文件的目录

在这里插入图片描述


♥ 测试用例

我们在项目目录下准备一个lua文件,并带上简单输出

在这里插入图片描述
在这里插入图片描述

在C++代码内引用相关环境,并加载lua文件

在这里插入图片描述

注:lua.hpp文件在include目录下,实际代码如下

在这里插入图片描述

执行调试器,成功输出lua文件内容

在这里插入图片描述


♠ 引外部下载的Lua环境

如果本地没有安装lua环境,或者想用指定的lua版本,可以从官网直接下载现成的头文件和库


♥ 下载文件

进入lua官网下载页, 选择binaries选项

http://www.lua.org/download.html

在这里插入图片描述

在历史中选择自己想要的版本

在这里插入图片描述

根据平台版本选择下载文件

在这里插入图片描述
在这里插入图片描述

下载解压后就是下图所示的样子了,目录下有lib库,include文件下就是头文件

在这里插入图片描述


♥ 引入文件

承接上文创建C++空项目之后,我们直接在目录下创建两个文件,分别是include和lib文件

在这里插入图片描述

然后吧刚才下载目录内的库放到lib文件夹,include下的头文件的都放到工程目录的include目录下

在这里插入图片描述

接下来就和上文当中引入头文件和库的步骤一样了,在属性页补充名称和目录,这里因为直接在项目目录下,所以用了相对路径

在这里插入图片描述
在这里插入图片描述


♠ 编译Lua源码后引入

上述方案都是直接引入已经编译好的lua解释器,还有一种方案是从官网下载lua对应版本的源码,然后自己编译,这样做的好处是可以在源码的基础上去拓展lua的功能


♥ 下载Lua源码

同样的再Lua官网下载页,选择download选项

在这里插入图片描述

选择对应的版本下载后解压

在这里插入图片描述

解压目录如下

在这里插入图片描述


♥ 创建静态库项目

在VS中创建一个C++的静态库项目,命名为lua5.1

在这里插入图片描述

删除自动创建的文件

在这里插入图片描述


♥ 拷贝源码

拷贝源码src目录到项目目录下

在这里插入图片描述
在这里插入图片描述

右键解决方案内的项目,选择添加现有项,将src目录所有的.h和.c文件添加到项目内

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


♥ 不使用预编译头

右键解决方案内的项目,属性页内的C/C++下的预编译头,改为不使用预编译头

在这里插入图片描述


♥ 注释main方法

lua.cluac.c中的main方法注释掉, 我们不需要它有自己的执行入口

在这里插入图片描述
在这里插入图片描述


♥ 添加预处理器定义标记

右键解决方案内的项目,属性页内的C/C++下的预处理器,添加_CRT_SECURE_NO_DEPRECATE标记,不然生成的时候会报错

在这里插入图片描述


♥ 生成编译文件

右键解决方案内的项目,选择生成,在输出栏内可以看到生成成功的输出,至此我们自己生成编译文件的操作已经结束了

在这里插入图片描述


♥ 整合编译文件

回到我们静态库的工程目录下,进入到Debug目录内,找到lua5.1.lib文件,这个生成文件就是上文我们引用的库

注:这个lib文件名字跟我们的静态库项目名字相同,这里静态库我是用了和官方一样的名字,所以生成出来和下载文件一致

在这里插入图片描述
在这里插入图片描述

在源码的src目录下,被选中的四个头文件,和我们之前include目录下的文件相同

在这里插入图片描述
在这里插入图片描述

找到这几个文件,剩下的操作步骤就和之前一样了


♠ 推送

  • Github
https://github.com/KingSun5

♠ 结语

若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。

👉 本文属于原创文章,转载请评论留言,并在转载文章头部著名作者出处👈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shellcode分离加载实现免杀的两种方式(VT免杀率:1/68)

简介 本文详细介绍了如何通过文件加载和远程URL加载方式实现Shellcode分离加载,以规避安全软件的检测。文章首先描述了通过Metasploit Framework生成的shellcode文件加载的过程,并提供了相关的C代码。 为了避免被杀毒软件检测,利用动态API调…

自动化测试-DevOps如何实施?看看10年测试大佬的总结...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Selenium4自动化测…

2023最新!软件测试高频面试题基础知识点分享

近期也算是抽取出大部分休息的时间,为大家准备了一份通往大厂面试的小捷径,准备了一整套软件测试复习面试的刷题以及答案,我知道很多同学不知道怎么复习,不知道学习过程中哪些才是重点,其实,你们经历过的事…

内网渗透(八十二)之 CVE-2019-1040 NTLM MIC 绕过漏洞

CVE-2019-1040 NTLM MIC 绕过漏洞 漏洞背景 2019年6月11日,微软发布6月份安全补丁更新。在该安全补丁更新中,对 CVE-2019-1040 漏洞进行了修复。该漏洞存在于Windwos 大部分版本中,当中间人攻击者能够成功绕过NTLM 消息完整性校验(MIC)时,Windows 存在可能可篡改的漏洞…

R语言实践——rWCVP生成可发表级别的物种发现记录矩阵

rWCVP生成可发表级别的物种发现记录矩阵 介绍1. 查询一组示例数据2. 生成和格式化出现矩阵3. 额外地对国家进行处理 介绍 世界维管植物名录(WCVP)提供了已知的>340,000种维管植物物种的分布数据。该分布数据可用于构建植物物种名录的发现…

解密报错-java.security.InvalidKeyException: Illegal key size(本机解密正常,服务器解密报错)

记录在对接微信接口时需要的问题,对微信消息进行解密时报错,在本地进行解密是正常的,但部署到服务器进行解密就会报错 报错信息 java.security.InvalidKeyException: Illegal key sizeat javax.crypto.Cipher.checkCryptoPerm(Cipher.java:…

windows 系统扩容C盘注意事项

windows系统大家都不陌生,是大家用的最多的操作系统。在实际的使用中,遇到需要扩容C盘的情况不是很多,但是如果遇到了,有以下几个事项需要大家注意: 剩余空间是否充足 不论当前服务器是物理服务器还是虚拟机&#xff…

Slack工作区SolidUI 集成Claude使用流程,替代GPT3.5

背景 Claude 由 OpenAI 副总裁离职创立的和chatGPT对位的AI机器人,号称是chatGPT一生的对手! 比之前的一些模型如GPT-3 要强大得多,因此Claude 被认为是ChatGPT 最有力的竞争对手。Claude 的研发公司是专注人工智能安全和研究的初创公司Anth…

谷歌Bard_VS_Baize-7B_VS_文心一言体验对比

2023年4月4日,来自加州大学圣迭戈分校、中山大学和微软亚研的研究者提出了Baize,该模型是让ChatGPT 自我对话,批量生成高质量多轮对话数据集,利用该数据集对LLaMA进行微调得到的(目前版本还没有RLHF) 关于B…

使用Dockerfile搭建rtthread 瑞萨开发环境

文章目录 1. 装docker2. 拉代码3. 构建镜像4. 启动容器5. vscode打开并编译6. 程序下载 整体分为6步 安装docker拉取rtthread_瑞萨仓库代码使用仓库中的dockerfile构建一个镜像使用构建好的镜像启动一个容器使用vscode打开并编译代码下载程序 1. 装docker Docker的安装方式可…

vue自动更新版本号

在项目中创建buildTime.js //npm run build打包前执行此段代码 let fs require(fs); //返回package的json数据 function getPackageJson() { let data fs.readFileSync(./package.json);//fs读取文件 return JSON.parse(data);//转换为json对象 } let packageData getPackag…

FreeRTOS_中断配置和临界段

目录 1. Cortex-M 中断 1.1 中断简介 1.2 中断管理简介 1.3 优先级分组定义 1.4 优先级设置 1.5 用于中断屏蔽的特殊寄存器 1.5.1 PRIMASK 和 FAULTMASK 寄存器 1.5.2 BASEPRI 寄存器 2. FreeRTOS 中断配置宏 2.1 configPRIO_BITS 2.2 configLIBRARY_LOWEST_INTERRU…

IOC(控制反转)

目录 理解IOC 理解IOC容器 Spring IOC IOC优点 什么是依赖注入DI DI是如何实现的呢? 总结 : IOC实现的基本过程 容器如何放入Bean对象? IOC实现的基本过程 IoC容器在Spring的实现 理解IOC IoC 是 Inversion of Control 的简写,译为“控制反…

容器部署 redis 哨兵集群 【问题笔记】

目录 1.哨兵模式 (sentinel) 启动时报错:Cant resolve instance hostnames 2.哨兵模式下 master 节点崩掉后无法切换从节点为master节点 1.哨兵模式 (sentinel) 启动时报错:Cant resolve instance hostna…

Axure教程—单色折线图(中继器)

本文将教大家如何用AXURE中的中继器制作单色折线图 一、效果介绍 如图: 预览地址:https://d84rfm.axshare.com 下载地址:https://download.csdn.net/download/weixin_43516258/87814278 二、功能介绍 简单填写中继器内容即可动态显示值样…

Call for Papers丨第十一届全国社会媒体处理大会,AI Open设独立专刊投稿渠道

全国社会媒体处理大会(SMP)专注于以社会媒体处理为主题的科学研究,为传播社会媒体处理最新的学术研究与技术成果提供广泛的交流平台,旨在构建社会媒体处理领域的产学研生态圈,成为中国乃至世界社会媒体处理的风向标。 …

2023年了PWA开发模式在国内还有发展空间吗?

随着国内外技术及生态的迅猛发展,应用程序的开发模式也在不断演进。在过去,就我及身边同事的经验而言,会常常需要在不同的平台(如Android、iOS)编写不同的代码,导致开发成本和维护困难的问题。 然而&#…

WBS项目分解的7大基本原则

制定和分解WBS,需要遵循的基本原则: 1、唯一性 每一项工作任务在WBS中是唯一的。 WBS项目分解的7大基本原则 2、负责制 每一项任务都需要明确责任人,一人负责,其他人参与。 3、可测量性 每一项任务都应该是可以量化和测量的&#…

5月份招了个00后测试堪称卷王之王,让人崩溃...

前段时间公司新来了个同事,听说大学是学的广告专业,因为喜欢IT行业就找了个培训班,后来在一家小公司干了三年,现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍,服务器缩减一半,性能反而提升4倍&am…

非流式语音合成和流式语音合成

语音合成技术:https://zhuanlan.zhihu.com/p/113282101 流式语音合成技术揭秘与实践 1、非流式语音合成,一次性输入文字,一次性输出语音,注重语音合成系统的 整体运算速度 ,不适合做语音交互;流式语音合成…