[Happy Coding] luabind 0.9.1版本尝试
来源:互联网 发布:python环境搭建 编辑:程序博客网 时间:2024/04/30 20:11
luabind 0.9.1版本尝试
1. 编译luabind 0.9.1 linux版本需要bjam binary
直接copy boost/1.37.0目录中编译好的bjam binary到~/bin目录,然后在luabin根目录中运行bjam
编译之前需要设置环境变量BOOST_ROOT=~/mylibs/boost/1.37.0/ 和LUA_PATH=~/mylibs/lua/5.1/
2. 尝试第一个example,就发现了自己版本的lua5.1 binary不支持loadlib函数
> print(loadlib())
解决办法是在lua src/luaconf.h文件中,将LUA_COMPAT_LOADLIB激活,然后重新编译lua binary
3. 编写C++对LUA的扩展库:
解决2之后,编写如下的C++代码:
#include <iostream>#include <luabind/luabind.hpp>void greet(){ std::cout << "hello world - my luabind try\n";}extern "C" int init(lua_State* L){ using namespace luabind; open(L); module(L) [ def("greet", &greet) ]; return 0;}
然后gcc编译:
g++ -o helloworld.so helloworld.cc -fPIC -shared -I/home/zeli/mylibs/boost/1.37.0/include -I/home/zeli/mylibs/luabind-0.9.1/ -I/home/zeli/mylibs/lua/5.1/include -L/home/zeli/mylibs/luabind-0.9.1/lib -L/home/zeli/mylibs/lua/5.1/lib -lluabind -llua
你可以将后面一坨编译选项让一个shell脚本来生成(gcccmd.sh + x):
echo "-fPIC -shared -I/home/zeli/mylibs/boost/1.37.0/include -I/home/zeli/mylibs/luabind-0.9.1/ -I/home/zeli/mylibs/lua/5.1/include -L/home/zeli/mylibs/luabind-0.9.1/lib -L/home/zeli/mylibs/lua/5.1/lib -lluabind -llua"
如此一来,你可以少敲很多字符:
g++ -o helloworld.so helloworld.cc `./gcccmd.sh`
在当前目录下会有一个helloworld.so文件产生。进一步你可以用ldd/nm来看下helloworld.so文件包含了些什么。
4. 在LUA中调用C++的代码:
如果你在luabind目录中直接运行lua binary,然后loadlib将会发现如下错误
[zeli@p03bc luabind]$ luaLua 5.1 Copyright (C) 1994-2006 Lua.org, PUC-Rio> loadlib('helloworld.so', 'init')()stdin:1: attempt to call a nil valuestack traceback: stdin:1: in main chunk [C]: ?>
这是因为lua binary放在~/bin目录下,而helloworld.so不跟它在同一目录。loadlib函数返回nil.
直接描述so文件的全路径可以解决这个问题:
> loadlib('/home/zeli/code/luabind/helloworld.so', 'init')()> greet()hello world - my luabind try>
init是定义在so中的函数,符合lua的C-API规范。
在loadlib之后需要直接运行这个函数,才能将里面借助luabind的函数/类注册到lua vm环境中。
完成之后,lua vm中便有了greet C函数。我们可以在lua环境中直接运行。
这是lua => C/C++的经典写法,通过C/C++语言编写的外部库的方法来扩展lua的功能,从而让lua 代码可以调用到C/C++的函数。
0 0
- [Happy Coding] luabind 0.9.1版本尝试
- VS2012编译luabind-0.9.1
- [Happy Coding] 加速Windows GUI debug版本的编译
- Happy for Coding
- win7 VS2008 编译luabind-0.9.1 动态库 静态库
- linux centos 编译luabind-0.9.1 动态库 静态库
- luabind-0.9.1在windows、linux下的使用详解及示例
- luabind 0.8.1的编译(VC71编译)
- [Happy Coding] malloc/kmalloc/vmalloc/slab cache/__get_free_page
- [Happy Coding] 函数返回数组指针和数组引用
- [Happy Coding] C++中的多态遇上数组
- [Happy Coding] fprintf 不正确调用惹的祸
- [Happy Coding] 关于system/exit/wait的解释
- cocosdx 3.1.1 luabind lua绑定C++类
- luabind 和设置1字节对齐导致服务器挂掉
- Leetcode(1)-happy数
- happy!
- Happy
- 生活的乐趣
- 正则表达式之(手机+固定电话+传真) 校验
- 2013年软件设计师考试知识结构(八)
- 黑马程序员----javaSE中的其他类
- 2013年软件设计师考试知识结构(九)
- [Happy Coding] luabind 0.9.1版本尝试
- 包及访问权限
- 2013年软件设计师考试知识结构(十)
- Java技术的发展前景
- NDK开发 eclipse相关开发环境的搭建
- 测试驱动开发TDD(一)
- XML解析方式 XML解析工具 OXMapping工具
- 敏捷测试(5)--基于story的敏捷基础知识
- 测试驱动开发TDD(二)