首页 / 操作系统 / Linux / Lua加入socket库支持
最近做一个项目使用了lua脚本解析器,集成了lua脚本解析器以后,加入了自己想加入的扩展函数库,如果不想继续开发或者够用的话,那个项目的调研也就到此结束了,算是浅尝则止吧。但是后来又来了一些新的需求了,需要进行一些socket的通信,但是socket的通信编写起来就稍微有点麻烦了,所以就找了找lua扩展库,当然是开源的,发现关于socket扩展库早在几年前就已经发布了,并且几年都木有更新,估计写好也好以后,也没有什么好更新的。http://luaforge.net/projects/其中socket的项目名字叫做luasocket。下载下来在Ubuntu 13.04编译出奇的顺利,一个make命令,直接在src文件夹下就生成了socket.so.2.0.2 这个so文件。这个时候需要做的就是将socket.so.2.0.2 这个文件拷贝到已经编译好的lua解析器的目录下,执行./lua这个命令,进入命令中以后,执行require("socket")这个命令,如果如下图一样的话,那么so就成功加载了。当然至少需要将socket.so.2.0.2 修改为socket.so 这个名字看到上面绿色的部分了吧但是一般事情不会 这样顺利的,因为我前面不是已经说过了么 socket库编写好了以后几年都木有更新了,所以里面用的接口都是很早的lua解析器的接口,虽然socket 是fpic编译成so库,不会出现链接错误,但是lua解析在加载该so库的时候require却不含糊,少任何一个函数都会出现错误,但是知道原理以后,基本上修改起来就比较简单了。并且要能够加载so库,在编译lua解析器的时候也不能使用 make ansi 这个编译方法,而是需要需要使用 make linux这样的编译方法。关于加载的时候出现的错误的解析方法,请参考 http://www.linuxidc.com/Linux/2013-12/93516.htm这篇博文或者google 百度一下估计都能够解决,我唯一没有解决的是使用eclipse的cdt编译出来的出现一些莫名其妙的错误,估计还是跟ansi c编译有关,但是暂时没有找到解决方法,不过问题也不大。这个是加入socket库的方法,而我不想每次都调用require这种方法,反正这个库也很小,所以我修改了makefile文件,将socket直接集成到了lua解析器里面了,变成了lua解析器中的基础库了集成方法,不再赘述,附件里面有集成好的打包代码,并且支持了Android手机,通过ndk可以编译成在android手机上直接运行的命令行程序,当然前提是需要写好socket的lua脚本,lua脚本的名称叫做sockettest.lua运行效果如下:命令执行的是 ./androidlua sockettest.lua脚本其实是下载一个百度首页的,看到http 200 OK了吧 嗯那就对了附件没有包含源码,不是我不厚道,是公司开发的项目不方便公开,但是里面有可在ubuntu 13.04下执行的linux程序和 android 命令行下执行的程序,要是有技术交流的朋友可以给我留言。Lua 的详细介绍:请点这里
Lua 的下载地址:请点这里推荐阅读:Lua 语言 15 分钟快速入门 http://www.linuxidc.com/Linux/2013-06/86582.htmLua程序设计(第2版)中文 PDF http://www.linuxidc.com/Linux/2013-03/81833.htmLua程序设计(第二版)阅读笔记 http://www.linuxidc.com/Linux/2013-03/81834.htmNetBSD 将支持用 Lua 脚本开发内核组件 http://www.linuxidc.com/Linux/2013-02/79527.htmCentOS 编译安装 Lua LuaSocket http://www.linuxidc.com/Linux/2011-08/41105.htm