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

news/2025/1/31 7:20:40/
前言
本篇在讲什么

在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.ppmy.cn/news/78319.html

相关文章

2023.5.12解决Ubuntu中ens33没有ip

在Ubtuntu中的ens33没有ip 如果Ubuntu版本过高 sudo netplan apply如果是Ubuntu 16.04及更早版本 sudo vi /etc/systemd/resolved.conf具体情况如下图所示 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopbac…

忆享聚焦|ChatGPT、AI、网络数字、游戏……近期热点资讯一览

“忆享聚焦”栏目第十四期来啦&#xff01;本栏目汇集近期互联网最新资讯&#xff0c;聚焦前沿科技&#xff0c;关注行业发展动态&#xff0c;筛选高质量讯息&#xff0c;拓宽用户视野&#xff0c;让您以最低的时间成本获取最有价值的行业资讯。 目录 行业资讯 1.科技部部长王志…

RabbitMQ之死信队列

1 概念 ​ 死信&#xff0c;就是无法被消费的消息。 ​ 一般来说&#xff0c;producer将消息投递到broker或者直接到queue里了&#xff0c;consumer从queue取出消息进行消费&#xff0c;但某些时候由于特定的原因导致queue中的某些消息无法被消费&#xff0c;如果没有后续的处…

定了 香港新政6月1日生效 散户交易加密货币正式合法化!

如今&#xff0c;香港虚拟资产交易的各项准备工作已准备就绪。5月23日&#xff0c;香港证监会&#xff08;SFC&#xff09;详细介绍了各界参与虚拟资产交易的咨询总结文件&#xff0c;宣布《适用于虚拟资产交易平台营运者的指引》将于2023年6月1日生效。 SFC行政总裁梁凤仪表示…

「实在RPA·电力数字员工」助推电力行业提质增效

一、电力行业数字化转型的重要性: 电力行业作为节能减排的关键&#xff0c;其数字化转型是推动碳达峰、碳中和目标如期实现的重要一环。实现“双碳”目标&#xff0c;能源是主战场&#xff0c;电力是主力军。对此&#xff0c;国家有关部门出台了一系列引导相关产业数字化发展的…

jar命令打包java应用和java打jar包的几种方式详解

一、Jar命令打包java应用的用法 jar是标准的java打包命令&#xff0c;位于JAVA_HOME/bin/目录下面。主要功能是将多个文件打包成一个单独的jar文件。 创建jar文件 jar c[v0Mmfe] [manifest] [jarfile] [entrypoint] [-C dir] inputfiles [-Joption] 更新jar文件 jar u[v0Mmfe…

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

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

算法题:20. 有效的括号

一、题目&#xff1a;20. 有效的括号 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括…