lua qt 编译_Win32下 Qt与Lua交互使用(一):配置Qt下Lua运行环境

偶然间看到Lua这种脚本语言,有点兴趣,简单学习了一下。html

发现Lua与C++之间能够实现很是强的交互性。Lua中能够使用C++中的函数,C++中也能够使用Lua中的函数。由此能够引起出不少奇思妙想了。函数

简单来讲,Lua动态的特性补充了C++的功能。固然,也看你具体怎么用。学习

笔者常常使用Qt,故准备将Qt和Lua结合在一块儿。想象一下在Lua脚本中调用以下代码:测试

w =QWidget:new()

w:show()

而后弹出一QWidget的窗口,是多么感人的一件事情呀。ui

好,下面开始配置环境吧。lua

1. 下载Lua 5.1。目前的最新版本是5.2,可是由于使用到的toLua不支持Lua 5.2,故仍然使用5.1版。spa

2. 下载toLua。笔者找到的是目前最新的toLua 0.95,下载下来后,解压。htm

将include/toLua++.h,src/lib中*.c/*.h文件,src/bin/toluabind.c,共8个文件复制到Lua解压目录/src目录下,仅复制文件。blog

3. 编译。在Lua解压目录下新建文件夹bin,新建一build.bat文件,输入如下代码:

@setlocal@if "%1" == "mingw" goto :build_mgw@if "%1" == "vs" goto :build_vs@if "%1" == "dist" goto :install@if "%1" == "" goto :build_mgw

@echo usage: %1[mingw|vs|dist]

@goto :EOF

:build_mgw@set srcdir=..\src\@set CFLAGS=-s -O3 -Wall -I. "-DLUA_USER_H="

@echo build lua52.dll ...gcc %CFLAGS% -DLUA_BUILD_AS_DLL -c %srcdir%*.c

@del lua.o luac.o

gcc -s -mdll -o lua52.dll -Wl,--out-implib,liblua52.dll.a *.o@echo build lua.exe ...gcc %CFLAGS% -o lua.exe %srcdir%lua.c -L.-llua52@echo build luac.exe ...gcc %CFLAGS% -c %srcdir%*.c

@del lua.o luac.o

ar rcs liblua52.a *.o

gcc %CFLAGS% -o luac.exe %srcdir%luac.c -L.-static -llua52

@del *.o 2>nulgoto :dist

:build_vs@set srcdir=..\src\@set MYCOMPILE=/nologo /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE "/DLUA_USER_H="@set MYLINK=link /nologo

@set MYLIB=lib /nologo

@set MYMT=mt /nologo@echo build lua52.dll ...%MYCOMPILE%/DLUA_BUILD_AS_DLL %srcdir%*.c

@del lua.obj luac.obj

%MYLINK%/DLL /out:lua52.dll *.objif exist lua52.dll.manifest^

%MYMT% -manifest lua52.dll.manifest -outputresource:lua52.dll;2%MYCOMPILE%/DLUA_BUILD_AS_DLL %srcdir%lua.c

%MYLINK%/out:lua.exe lua.obj lua52.libif exist lua.exe.manifest^

%MYMT% -manifest lua.exe.manifest -outputresource:lua.exe

%MYCOMPILE% %srcdir%*.cdel lua.obj luac.obj

%MYLIB%/out:lua52s.lib *.obj

%MYCOMPILE% %srcdir%luac.c

%MYLINK%/out:luac.exe luac.obj lua52s.libif exist luac.exe.manifest^

%MYMT% -manifest luac.exe.manifest -outputresource:luac.exe

@del *.exp *.obj *.manifestgoto :dist

:dist

@echo install ...@set dstdir=.\Lua52\

mkdir %dstdir% 2>nulmkdir %dstdir%clibs 2>nulmkdir %dstdir%include 2>nulmkdir %dstdir%lib 2>nulmkdir %dstdir%lua 2>nulcopy /y *.dll %dstdir% >nulcopy /y *.exe %dstdir% >nulcopy /y *.a %dstdir%lib >nulcopy /y %srcdir%lua*.h* %dstdir%include >nulcopy /y %srcdir%laux*.h %dstdir%include >nulcopy /y %dstdir%lua.exe %dstdir%lua52.exe >nulcopy /y %dstdir%luac.exe %dstdir%lua52c.exe >nul:EOF

echo finish

这是一位Lua爱好者为编译Lua 5.2编写的脚步,在这里能够直接使用。

注意建议使用MinGW编译,VS会致使一些问题。没有安装MinGW的能够百度一下,配置好MinGW的环境,并将bin目录加入环境变量path中。

4. 运行编译脚步。建议先打开CMD窗口,在CMD窗口中进入该目录,执行build.bat。这样报错的话能够看到一些信息。

可能会有Warnning,不过仍是能够顺利经过编译的。在生成的Lua52文件夹中,就有咱们想要的东西。

确保Lua52/lib目录下,生成了liblua52.a文件。

5. 测试使用。使用MinGW编译,建议使用MinGW版的Qt。

在Qt Creator中新建一个工程。删除到只剩下mian.cpp便可。

复制Lua52/include下全部文件,以及以前复制的toLua++.h,到Qt工程目录下。在Qt Creator中加入这些新文件。

复制Lua52/lib/liblua52.a文件到Qt工程目录下。在Qt工程的*.pro文件中加入

LIBS+=../LuaTest/liblua52.a

笔者的工程名为LuaTest,具体的目录名按照你的工程名以及你的build文件夹地址修改。若是提示找不到文件,就该为绝对路径。

在main.cpp文件中,加入

extern "C"{

#include"lua.h"#include"lualib.h"#include"lauxlib.h"#include"tolua++.h"}

将main函数改成:

lua_State *lu =luaL_newstate();

luaL_openlibs(lu);//执行内存脚本

string str = "print (\"Hello world!\")";

luaL_loadbuffer(lu, str.c_str(), str.length(),"line");

lua_pcall(lu,0, 0, 0);

顺利运行则配置成功。(在.pro文件中加入CONFIG+=console,在项目-〉运行中勾选Run in terminal,能够打开控制台)

那么如何作到在Lua中新建Qt的窗口呢?下篇博客继续探讨。

若有问题,能够留言。发现错误,欢迎指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值