<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ivaneeo's blog

    自由的力量,自由的生活。

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

    將 Lua 源代碼直接放入最終產品,顯然不是個理想選擇。利用 LOOP 提供的 Precompiler 工具,可以將 Lua 模塊編譯為 C 代碼。

    準備工作

    LOOP 是一個 Lua 的 OOP 框架,Precompiler 則是 LOOP 中包含的一個工具。要安裝 LOOP,得先安裝 LuaRocks

    $ wget http://luarocks.org/releases/luarocks-2.0.5.tar.gz $ tar zxf luarocks-2.0.5.tar.gz $ cd luarocks-2.0.5 $ ./configure $ make $ sudo make install 

    然后安裝 LOOP:

    $ sudo luarocks install loop 

    OK,現在準備工作完成了,接下來就是編譯 Lua 模塊為 C 代碼。

    編譯

    我們的框架中有一個 display.lua 模塊,下面的代碼可以將這個模塊編譯出來:

    $ precompiler.lua -o luaqeeplayscripts -l "?.lua" -b -p qeeplay qeeplay/display.lua 

    最后會得到 luaqeeplayscripts.c/.h 文件。其中定義了函數:

    qeeplay int luaopen_qeeplay_display(lua_State *L); 

    在上述命令行中,各個參數的意義如下:

    -o: 指定輸出文件名,例如 -o luaqeeplayscripts 會輸出 luaqeeplayscripts.c/.h  -l: 指定推斷 lua 模塊名的模式,設定為 -l "?.lua" 就會以 lua 源文件名稱作為模塊名。     例如 display.lua 就是 display 模塊。如果 display.lua 文件在 qeeplay 子目錄中,     那么 qeeplay/display.lua 的模塊名就是 qeeplay.display。  -b: 編譯為字節碼  -p: 函數定義的前綴,一般指定一個可以方便以后對生成的 .c/.h 文件進行再處理 

    如果要將多個 lua 文件編譯為一個 C 代碼,可以添加更多的文件名到命令行中,例如:

    $ precompiler.lua -o luasocketscripts -l "?.lua" -b -p socket \     socket.lua \     socket/url.lua \     socket/tp.lua \     socket/smtp.lua \     socket/mime.lua \     socket/ltn12.lua \     socket/http.lua \     socket/ftp.lua 

    會創建 luasocketscripts.c/.h 文件,其中定義下列函數:

    socket int luaopen_socket(lua_State *L); socket int luaopen_socket_url(lua_State *L); socket int luaopen_socket_tp(lua_State *L); socket int luaopen_socket_smtp(lua_State *L); socket int luaopen_socket_mime(lua_State *L); socket int luaopen_socket_ltn12(lua_State *L); socket int luaopen_socket_http(lua_State *L); socket int luaopen_socket_ftp(lua_State *L); 

    載入編譯好的 C 代碼

    利用前一篇文章中的 lualoadexts.c/lualoadexts.h,做一些修改即可:

    luaqeeplayscripts.c

    #include "lualoadexts.h"  // qeeplay #include "luaqeeplayscripts.h"  static luaL_Reg luax_preload_list[] = {     {"qeeplay.display", luaopen_qeeplay_display},     {NULL, NULL} };  void luax_initpreload(lua_State *L) {     .... } 

    如果有更多模塊需要載入,只需要 include 相應的頭文件,并修改 luax_preload_list 定義即可。

    posted on 2012-02-08 00:01 ivaneeo 閱讀(1105) 評論(0)  編輯  收藏 所屬分類: lua-擼語言
    主站蜘蛛池模板: 亚洲综合av一区二区三区不卡 | 亚洲一区二区三区乱码在线欧洲| 最近中文字幕免费大全| 国产一区二区三区无码免费| 亚洲影院天堂中文av色| 免费在线看v网址| 亚洲宅男精品一区在线观看| 福利免费观看午夜体检区| 国产99在线|亚洲| 思思99re66在线精品免费观看| 亚洲中文字幕无码av| 成年女人男人免费视频播放| 亚洲日韩AV一区二区三区中文| 免费无码又爽又高潮视频 | 日韩免费精品视频| 亚洲日韩国产精品乱-久| 免费毛片在线播放| 人碰人碰人成人免费视频| 亚洲无码黄色网址| a视频在线观看免费| 亚洲美女aⅴ久久久91| 午夜宅男在线永久免费观看网| 亚洲国产AV一区二区三区四区| 四虎影库久免费视频| 好男人资源在线WWW免费| 亚洲国产综合专区在线电影| 99久久99久久精品免费看蜜桃| 亚洲熟妇av午夜无码不卡 | 日本一道本高清免费| 国产精品极品美女自在线观看免费| 国产亚洲AV手机在线观看| 99久在线国内在线播放免费观看| 国产精品亚洲自在线播放页码 | 亚洲综合色区在线观看| 免费国产成人午夜在线观看| 亚洲成年人电影网站| 波多野结衣中文一区二区免费| 免费无码一区二区三区蜜桃 | 一级做a毛片免费视频| 亚洲韩国—中文字幕| 国产精品嫩草影院免费|