最近做一个项目使用了lua脚本解析器,集成了lua脚本解析器以后,加入了自己想加入的扩展函数库,如果不想继续开发或者够用的话,那个项目的调研也就到此结束了,算是浅尝则止吧。
但是后来又来了一些新的需求了,需要进行一些socket的通信,但是socket的通信编写起来就稍微有点麻烦了,所以就找了找lua扩展库,当然是开源的,发现关于socket扩展库早在几年前就已经发布了,并且几年都木有更新,估计写好也好以后,也没有什么好更新的。
其中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这样的编译方法。
这篇博文或者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 命令行下执行的程序,要是有技术交流的朋友可以给我留言。
推荐阅读: