<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-擼語言
    主站蜘蛛池模板: 久久亚洲精品国产亚洲老地址| 国产成人亚洲精品狼色在线| 亚洲精品视频免费看| a级毛片无码免费真人久久| 中文国产成人精品久久亚洲精品AⅤ无码精品| 亚洲精品成a人在线观看夫| 免费看无码自慰一区二区| 亚洲综合色一区二区三区| 在线观看人成视频免费| 亚洲a∨无码精品色午夜| 国产在线观看免费不卡| 免费又黄又爽又猛大片午夜| 亚洲国产精品一区二区九九| 一个人看的在线免费视频| 亚洲最大AV网站在线观看| 男人j进入女人j内部免费网站 | 亚洲成A人片在线观看中文| 色噜噜狠狠色综合免费视频| 亚洲AⅤ永久无码精品AA| 久久嫩草影院免费看夜色| 亚洲av永久无码制服河南实里| 日韩在线不卡免费视频一区| 亚洲春黄在线观看| 色视频色露露永久免费观看| 日本在线观看免费高清| 亚洲大成色www永久网站| 91免费精品国自产拍在线不卡| 亚洲男同gay片| 国产成人亚洲精品影院| 色欲A∨无码蜜臀AV免费播| 亚洲va精品中文字幕| www.亚洲色图.com| 免费无码一区二区三区| 国产精品亚洲综合久久| AV在线亚洲男人的天堂| 59pao成国产成视频永久免费 | 在线免费视频你懂的| 亚洲综合无码一区二区三区| 国产大片51精品免费观看| 国产va在线观看免费| 国产精品亚洲精品久久精品 |