更多《C++的十万个为什么》


在[46]脚本语言Lua的特点是什么?(同Python,Ruby,Perl等对比)这篇文章中,我们谈到了可以将脚本语言Lua和C++结合起来解决问题,这样既可以利用C++性能高的特点来执行大量的运算,又可以利用脚本语言Lua的灵活性来表达复杂的逻辑,这样各取所长,各自发挥自己的特点,做到了扬长避短。而这种混合编程的方式,也许是未来软件开发的一个趋势。
既然如此,那么如何进行C++和Lua的混合编程呢?
A:

实现C++和Lua混合编程的第一步,是在计算机上编译并安装Lua。
编译

Lua是以源代码的形式发布的,所以我们需要下载其源代码自己编译。你可以从这里下载Lua 5.2.1,也可以到Lua的官方网站下载最新版本。
下载得到源代码后,就是编译了。整个过程非常简单。在这里,我使用的是MinGW编译器,如果你安装的是其他编译器,可以参考Lua的文档,其中也有详细的说明。
执行MinGW平台的编译

    F:\code\lua>make mingw
    cd src && make mingw
    make[1]: Entering directory `F:/code/lua/src’
    make “LUA_A=lua52.dll” “LUA_T=lua.exe” \
    “AR=gcc -shared -o” “RANLIB=strip –strip-unneeded” \
    “SYSCFLAGS=-DLUA_BUILD_AS_DLL” “SYSLIBS=” “SYSLDFLAGS=-s” lua.exe

测试编译是否成功

    F:\code\lua>make test
    src/lua -v
    Lua 5.2.1 Copyright (C) 1994-2012 Lua.org, PUC-Rio

如果你看到上面的版本信息输出,就表示你编译成功了。
当然,如果你要是嫌上面的步骤麻烦,或者是没有合适的编译器,可以直接从其官方网站上下载二进制文件使用。
安装

编译完成后,就是安装了。本来Lua提供的Makefile可以同时完成安装的,可是这个文件在Windows平台上使用有问题,只好自己手动安装了,其实也很简单。
在我这里,Lua主要是配合MinGW使用,所以我决定将他们安装在一起。
首先,复制刚刚编译得到的lua.exe和luac.exe以及lua52.dll到MinGW的bin目录下,如果你想将Lua安装到其他目录,是需要将这三个文件复制到该目录,并将该目录添加到PATH路径即可。
这里,我们完成了Lua解释器的安装,因为我们要进行C++和Lua的混合编程,我们还需要安装与之相关的头文件和库文件。
首先将src目录下的
luaconf.h – Lua配置说明
lua.h – Lua C API支持
lauxlib.h – Lua辅助库(高级支持)
lualib.h – Lua标准库(提供访问Lua语言标准库的能力)
lua.hpp – C++版本的lua头文件。
这五个文件复制到MinGW的头文件目录下。其中前两个是必须的,仅拷贝lua.h会导致编译错误(找不到配置说明文件luaconf.h),第三个通常也是必须的,它提供了一系列以luaL_开头的函数和宏,方便了Lua的使用(比如参数检测,以及与Lua兼容的字符串缓冲luaL_Buffer),第四个通常来说不重要,它提供了载入标准库的指令(luaL_openlibs),以及标准库的标准名字的宏。另外还有Lua中文件IO的类型识别方式。最后一个供C++包含,其实只是简单地载入了前三个库,并加了extern “C”修饰而已。(感谢sw老师补充)
然后,将src目录下的liblua.a复制到MinGW的库文件目录(这里只是为了图省事,实际上他们可以在任何目录,不过编译器需要进行一定的设置,以便找到这些文件)
到这里,我们的Lua就编译安装完成了,下一个Lua的hello world看看吧
创建一个hello.lua的文本文件,编辑其内容如下:

    –Lua的Hello World
    print(“Hello World”)

然后,在命令行窗口以如下的命令执行这个脚本

    lua hello.lua

如果在屏幕上看到了Hello World的输出,就表示我们的Lua已经可以正常工作了。
然而,我们的目的并不是执行Lua脚本,而是C++和Lua的混合编程,所以接下来我们将介绍Lua脚本的另外一种执行方式——嵌入C++程序执行。请看下集[49]一半是性能,一半是灵活——C++和Lua混合编程(如何在C++中执行Lua脚本?)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值