前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Windows下Lua的下载与安装使用基于Visual Studio编译器

Windows下Lua的下载与安装使用基于Visual Studio编译器

原创
作者头像
晨星成焰
修改2024-09-08 13:15:20
1050
修改2024-09-08 13:15:20
举报
文章被收录于专栏:Lua学习笔记C++入门基础知识

前文须知

本文旨在Windows平台下基于Visual Studio 编译器能够快速使用Lua

并提供了四种可参考方案:

  1. 直接执行Lua编译环境
  2. 下载已经编译好的库
  3. 直接使用源代码
  4. 自己编译库引用

并使用C/C++结合Lua简单调用Lua文件

lua的下载和安装使用

进入lua官网

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

1.可执行文件下载安装(无需编译器使用)

进入官网的Binaries页面,点击下载进入该页面

https://luabinaries.sourceforge.net/download.html

下载lua-5.4.2_Win64_bin.zip Windows x64平台下的可执行文件

笔者将下载并解压缩后的文件都放入了D:\lua-5.4.2这个文件夹中,以下部分演示都基于该文件夹,也可以自行挑选存储目录

如图所示

这时可以直接点开lua54.exe使用lua编译环境

本地环境的引入(可选)

如果下载了可执行文件,可以引入环境变量

打开环境变量页面

在系统变量这里点击编辑

新建环境变量路径并指向存放lua相关可执行文件的文件夹

确认环境变量引入成功

打开cmd界面 输入lua54执行 ,并测试相应代码

有的版本是输入Lua 或者存放lua可执行文件文件夹里lua.exe对应的名称 例如lua52.exe 则lua52

2.编译好的文件下载(VS使用最快捷)

lua官网->lua官网的Binaries->History

点击lua下载页面左边的history

https://luabinaries.sourceforge.net/index.html#history

选择对应的版本下载即可,这里以Lua 5.4.2为例

下载解压缩即可

编译好的lib,dll和include的引入

打开Visual Studio创造一个新项目

右键项目名称->属性

找到C/C++->附加包含目录 加入存放lua的文件夹里的include

如图所示:

找到链接器->附加库目录 如图所示引入lua附加库目录

如图所示:

引入lib文件

点开链接器->输入->附加依赖项:

如图所示

如果忽略引入lib文件这一步,也可以在项目文件里直接引入

#pragma comment(lib,"lua54.lib")

简单验证使用

创造一个Test.lua文件

代码语言:lua
复制
print("Lua:执行Test.lua")

TestFunc()

function HelloCPP( )
    print("Lua:你好C++")
end

相应的cpp代码

代码语言:cpp
复制
#include <iostream>
#include <lua.hpp>

int Lua_Test(lua_State* L)
{
	std::cout << "CPP:Lua你好\n" << std::endl;
	return 0;
}

int main() {
	lua_State* L = luaL_newstate(); // Lua5开头以后的版本使用luaL_newstate()代替lua_open()

	// 加载所有lua标准库
	luaL_openlibs(L);

	int top = lua_gettop(L);
	printf("top:%d\n", top);

    //注册函数
	lua_pushcfunction(L, Lua_Test);
	lua_setglobal(L, "TestFunc");


	// 执行Lua文件
	int ret = luaL_dofile(L, "test.lua");//这里是相对路径
	if (ret != LUA_OK)
	{
		const char* err = lua_tostring(L, -1);
		printf("err:%s\n", err);
	}


	ret = luaL_dostring(L, "TestFunc");  

	ret = lua_getglobal(L, "HelloCPP");

	top = lua_gettop(L);
	printf("top:%d\n", top);

	if (ret == LUA_TFUNCTION)
	{
		if (lua_pcall(L, 0, 0,0) != LUA_OK)
		{
			const char * err = lua_tostring(L, -1);
			printf("err:%s\n", err);
			lua_pop(L, 1);  // 清除错误消息
		}
		else
		{
			printf("调用HelloCPP成功\n");
			lua_pop(L, 1);  // 弹出栈顶的函数引用
		}
	}

	top = lua_gettop(L);
	printf("top:%d\n", top);

	lua_close(L);
	return 0;
}

运行截图

3.直接编译源代码

  • 因为以上便捷操作都是基于5.4.2如果想要使用最新的5.4.7版本
  • 或者对查询和更改源代码有需求
  • 直接编译源代码或者编译成动态链接库导入

进入官网

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

下载lua-5.4.7.tar.gz

解压缩到所需项目中

.c文件放到scr文件夹

.h.hpp文件放到include文件夹

并将其全部包含到项目中

如图所示

找到.c文件里的 lua.c 和luac.c

将他们的 main函数注释

lua.c第670行起:

luac.c 第196行起:

项目属性设置:

右键项目属性->C/C++->附加包含目录

填入$(SolutionDir)include;

测试代码

代码语言:cpp
复制
#include <iostream>
#include <lua.hpp>

int main() {
	lua_State* L = luaL_newstate(); // 使用luaL_newstate()代替lua_open()

	// 加载标准库
	luaL_openlibs(L);

	// 执行Lua文件
	luaL_dofile(L, "test.lua");

	lua_close(L);
	return 0;
}
代码语言:lua
复制
print("hello world!")

4.自己编译成动态链接库导入

我们首先要知道第三方调用时关键的文件为 .lib文件 和 .dll文件 以及工程目录下的 .h头文件 。

所以我会以生产动态链接库的lib和dll文件,再引入相应的.h文件进行一个lua dll加载测试。

其实生成动态链接库后的具体流程可以参考2.编译好的文件下载(VS使用最快捷)

1. 创造项目引入文件

VS新建项目,搜索 Windows ,选择 “ Windows 桌面向导 ”,

创造项目时选择动态链接库-空项目

将下载的lua5.4.7源代码的.c和.h文件全部引入(除lua.c和luac.c以外),并包含于项目

源代码下载可以参考直接编译源代码

存储于项目中的方式可以像直接编译源代码的示例一样分src或者include,这次图省事不分了

2.VS项目属性修改

右键项目并点击属性 ->C/C++->预处理器定义

加入如下语句:

LUA_BUILD_AS_DLL;

应用并且确定

右键项目生成

找到生成的dll文件

3. 生成DLL和LIB测试

VS生成一个需要导入Lua库的测试项目

新建一个include文件夹并导入下载的源代码里的这部分文件

并修改如下属性

右键项目->属性->C/C++->附加包含目录->$(SolutionDir)include;

将之前生成的lib和dll文件丢入该项目所在文件夹里

找到链接器->附加库目录 如图所示引入lua附加库目录

代码测试环节

代码语言:cpp
复制
#include <iostream>
#include <lua.hpp>

#pragma comment(lib, "LuaDllP")

int main() {
	lua_State* L = luaL_newstate(); // 使用luaL_newstate()代替lua_open()

	// 加载标准库
	luaL_openlibs(L);

	// 执行Lua文件
	luaL_dofile(L, "test.lua");

	lua_close(L);
	return 0;
}
代码语言:lua
复制
print("hello world!")

注意你也可以不在代码里通过#pragma comment(lib, "LuaDllP")引入

而是如下

一些题外话

Q:为什么是动态链接库引入,而不是静态链接库引入?

A:多个应用程序如果使用相同的动态链接库,那么它们可以共享同一份库文件的内存映像。避免多个Lua虚拟机状态。并且动态链接可以保持可执行文件较小。

我们还可以将引入lua的项目保存为一个模版方便以后创造需要使用lua的项目

Visual Studio自定义项目模版(图解版)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前文须知
  • lua的下载和安装使用
  • 1.可执行文件下载安装(无需编译器使用)
    • 本地环境的引入(可选)
      • 确认环境变量引入成功
  • 2.编译好的文件下载(VS使用最快捷)
    • 编译好的lib,dll和include的引入
      • 简单验证使用
        • 创造一个Test.lua文件
        • 相应的cpp代码
        • 运行截图
    • 3.直接编译源代码
      • 项目属性设置:
      • 4.自己编译成动态链接库导入
        • 1. 创造项目引入文件
          • 2.VS项目属性修改
            • 3. 生成DLL和LIB测试
            • 一些题外话
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档