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

2024-09-08 13:15:20 浏览数 (2)

前文须知

本文旨在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:%dn", 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:%sn", err);
	}


	ret = luaL_dostring(L, "TestFunc");  

	ret = lua_getglobal(L, "HelloCPP");

	top = lua_gettop(L);
	printf("top:%dn", top);

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

	top = lua_gettop(L);
	printf("top:%dn", 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自定义项目模版(图解版)

0 人点赞