歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved