如何使用Lua扩展C/C++应用系列1-转自bbs.luachina.net
2005-04-17 16:55
1051 查看
Getting Started with Lua
Lua是轻量级的脚本语言,可以很方便用来扩展C/C++应用程序,下面我们通过几个简单的例子来学习Lua如何扩展C/C++的。
首先,你需要安装Lua,如果你使用windows操作系统你可以下载别人编译好了的二进制程序即可使用,当然你也可以下载Lua源代码(http://www.lua.org/download.html)使用你喜欢的编译器编译成二进制文件来使用.如果你使用Linux,你只需要下载源代码解压缩文件文件后执行make,然后作为root用户执行make install即可.Unix操作系统,你下载源代码,通过修改配置文件INSTALL中编译选项后执行和Linux下类似的操作即可.
当然如果你想在任意路径下都可以使用Lua,类Unix平台别忘了修改.profile文件加入你的环境变量;windows下则需要设置环境变量.
第一个程序:
这个程序很短小,但能说明问题,首先说明几点:
1. 调用lua_open()将创建一个指向Lua解释器的指针。
2. lua_baselibopen()函数加载Lua库。
3. 使用lua_dofile()加载脚本并运行脚本。
4. lua_close()来关闭Lua指向解释器的指针。
将下面的代码保存为luatest.cpp,如果你喜欢用C而不是C++,需要保存文件为luatest.c并且把extern去掉。
代码: 代码:
-- simple test
代码
rint "Hello, World!"
确认它能运行。
编译:
使用你喜欢的编译器编译上面保存的C/C++文件,下面以Linux为例:
命令行键入:
代码:g++ luatest.cpp -llua -llualib -o luatest
如果没有错误的话,运行程序:
代码:./luatest
程序应该打印出:Hello, World!
如果你不是Linux操作系统,使用的是Vc++编译器,你需要:
1. 创建一个新的win32控制台应用工程。
2. 将文件luatest.cpp添加到你的工程中。
3. 到Project, Settings点击Link页。
4. 添加lua+lib.lib到Object/library modules列表中。
5. 按F7编译程序。
运行程序以前,你需要确保lua+lib.dll文件放在windows可以找到的地方,将这个文件从C:/Program Files/Lua-5.0拷贝到Visual C++ project目录,如果编译没有错误的话,现在可以Ctrl+F5运行程序了。
通过这个例子我们已经踏上了在C/C++中嵌入Lua的第一步,下一篇我们介绍如何在C/C++中调用Lua函数并将函数的返回值传递给C/C++程序。
Lua是轻量级的脚本语言,可以很方便用来扩展C/C++应用程序,下面我们通过几个简单的例子来学习Lua如何扩展C/C++的。
首先,你需要安装Lua,如果你使用windows操作系统你可以下载别人编译好了的二进制程序即可使用,当然你也可以下载Lua源代码(http://www.lua.org/download.html)使用你喜欢的编译器编译成二进制文件来使用.如果你使用Linux,你只需要下载源代码解压缩文件文件后执行make,然后作为root用户执行make install即可.Unix操作系统,你下载源代码,通过修改配置文件INSTALL中编译选项后执行和Linux下类似的操作即可.
当然如果你想在任意路径下都可以使用Lua,类Unix平台别忘了修改.profile文件加入你的环境变量;windows下则需要设置环境变量.
第一个程序:
这个程序很短小,但能说明问题,首先说明几点:
1. 调用lua_open()将创建一个指向Lua解释器的指针。
2. lua_baselibopen()函数加载Lua库。
3. 使用lua_dofile()加载脚本并运行脚本。
4. lua_close()来关闭Lua指向解释器的指针。
将下面的代码保存为luatest.cpp,如果你喜欢用C而不是C++,需要保存文件为luatest.c并且把extern去掉。
代码: 代码:
#include <stdio.h> extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } /* the Lua interpreter */ lua_State* L; int main ( int argc, char *argv[] ) { /* initialize Lua */ L = lua_open(); /* load Lua base libraries */ lua_baselibopen(L); /* run the script */ lua_dofile(L, "test.lua"); /* cleanup Lua */ lua_close(L); return 0; }下面是一个简单的Lua脚本:
-- simple test
代码
rint "Hello, World!"
确认它能运行。
编译:
使用你喜欢的编译器编译上面保存的C/C++文件,下面以Linux为例:
命令行键入:
代码:g++ luatest.cpp -llua -llualib -o luatest
如果没有错误的话,运行程序:
代码:./luatest
程序应该打印出:Hello, World!
如果你不是Linux操作系统,使用的是Vc++编译器,你需要:
1. 创建一个新的win32控制台应用工程。
2. 将文件luatest.cpp添加到你的工程中。
3. 到Project, Settings点击Link页。
4. 添加lua+lib.lib到Object/library modules列表中。
5. 按F7编译程序。
运行程序以前,你需要确保lua+lib.dll文件放在windows可以找到的地方,将这个文件从C:/Program Files/Lua-5.0拷贝到Visual C++ project目录,如果编译没有错误的话,现在可以Ctrl+F5运行程序了。
通过这个例子我们已经踏上了在C/C++中嵌入Lua的第一步,下一篇我们介绍如何在C/C++中调用Lua函数并将函数的返回值传递给C/C++程序。
相关文章推荐
- 如何使用Lua扩展C/C++应用系列3-转自bbs.luachina.net
- 如何使用Lua扩展C/C++应用系列1
- 如何使用Lua扩展C/C++应用系列2
- 如何使用Lua扩展C/C++应用系列3
- C/C++中嵌入Lua--转自bbs.luachina.net
- 在C++应用中通过Luabind使用lua脚本(一)
- (原創) 如何使用struct? (C/C++) (.NET) (C++/CLI)
- 【C++ STL应用与实现】26: 如何使用std::for_each以及基于范围的for循环 (since C++11)
- (原創) 如何使用C++/CLI对图片做Grayscale Closing? (.NET) (C++/CLI) (C/C++) (Image Processing)
- 初识RabbitMQ系列之三:.net 如何使用RabbitMQ
- 【C++ STL应用与实现】22: 函数组合之1:如何使用std::bind (since C++11)
- 请教大家,如何使用sed命令,替换文件指定行的内容呢?-Linux系统管理-ChinaUnix.net
- 【C++ STL应用与实现】72: 标准库里的堆--如何使用标准库的heap算法
- 【C++ STL应用与实现】23: 如何使用std::mem_fn (since C++11)
- (原創) 如何使用Timer? (.NET) (C#) (C++/CLI)
- ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存
- 【C++ STL应用与实现】86: 如何使用std::accumulate
- 【程序语言】C/C++中如何使用Lua脚本
- 【C++ STL应用与实现】62: 如何使用std::next_permutation
- 如何在Windows平台使用VS搭建C++/Lua的开发环境