一、编译准备
1.1.编译环境
OS:win10
编译器:Mingw 32 bit
QT版本:QT 5.9
1.2.编译文件
lua-5.1.5
二、编译步骤
2.1.文件下载
csdn传送门 打包 lua源码+编译的库+测试项目+tolua++
打开lua-5.1.5.tar.gz压缩文件后,我们只要src这个文件夹的文件,解压出来。
2.2.建立QT项目
项目命名lualib
这里选静态库
编译器我是mingw 32 bit
去掉勾选的QtCore
新建的目录结构
删除自动创建的头文件和cpp文件,变为
2.3.导入源码到项目
右键pro文件,打开项目目录
将lua源码放入目录
右键点击项目导入文件
scr目录下得文件全选
打开pro文件
注释掉lua.c luac.c
切换到relase模式
点击构建
构建完成后,到项目目录relase目录,找到liblualib.a
复制出liblualib.a与scr文件夹
目前为止lua静态库编译完成。
三、使用编译库
3.1.项目建立
新建一个qt控制台程序
打开项目目录
将刚刚编译的库与src文件复制到该目录下
3.2.程序源码
增加这两句 $$PWD是当前目录,运行qmake
LIBS+=$$PWD/liblualib.a
INCLUDEPATH+=$$PWD/src
mian文件代码:
#include <QCoreApplication>
#include <stdio.h>
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
lua_State *L;
int countsum(int x,int y)
{
int sum;
lua_getglobal(L,"sum");//指向需要调用的lua函数
//压入参数
lua_pushnumber(L,x);//压入第一个参数
lua_pushnumber(L,y);//压入第二个参数
//调用函数
lua_pcall(L,2,1,0); //压入两个参数,返回一个结果
//取得结果
sum = (int)lua_tonumber(L,-1); //取得栈顶元素
lua_pop(L,1); //清理栈
return sum;
}
int setnum(int num){
return 100-num;
}
static int testfuction(lua_State* L)
{
int num = (int)lua_tonumber(L, -1); //从lua中取得一个数
lua_pushnumber(L, setnum(num));
printf("fuction start!!!!!\n");
printf("lua input number is=%d\n",num);
return 1;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
L = luaL_newstate();//新建lua虚拟机
luaL_openlibs(L);//加载lua的string math等库
luaL_dofile(L,"E:/testaaaaaa/test/test/test.lua");//绝对路径 执行脚本文件
int sum = countsum(100,200);
printf("test result is= %d\r\n", sum);
lua_close(L); //关闭lua文件
lua_State* L = lua_open();
luaopen_base(L);
// C++的函数和封装函数都必须是静态的,不可以是非静态的
lua_register(L, "testfuction", testfuction);
luaL_dofile(L, "E:/testaaaaaa/test/test/test2.lua"); //绝对路径
lua_close(L);
return a.exec();
}
lua文件
test.lua
function sum(x,y)
return x + y
end
test2.lua
local num=testfuction(10);