<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 閱讀(1100) 評論(0)  編輯  收藏 所屬分類: lua-擼語言
    主站蜘蛛池模板: 成人午夜免费福利| 伊人免费在线观看| 亚洲AV一区二区三区四区| 亚洲最大av资源站无码av网址| 精品亚洲成A人无码成A在线观看| 亚洲国产精品日韩在线| 亚洲综合校园春色| 一区二区亚洲精品精华液| 亚洲影院天堂中文av色| 日韩国产精品亚洲а∨天堂免| 韩国亚洲伊人久久综合影院| 理论秋霞在线看免费| 一区二区视频免费观看| a级毛片高清免费视频就| 秋霞人成在线观看免费视频| 91精品导航在线网址免费| 18禁免费无码无遮挡不卡网站| 成人AV免费网址在线观看| 日韩高清在线免费观看| 亚洲第一黄片大全| 亚洲综合无码精品一区二区三区| 亚洲国产精品成人精品无码区| 蜜芽亚洲av无码精品色午夜| 亚洲人配人种jizz| 免费观看亚洲人成网站| 免费一级全黄少妇性色生活片| 91成人免费福利网站在线| 在线美女免费观看网站h| 成年女人免费视频播放77777| 免费在线观看黄网| 亚洲va久久久噜噜噜久久| 亚洲中文无码线在线观看| 激情无码亚洲一区二区三区 | 亚洲伦乱亚洲h视频| 国产精品亚洲精品日韩已满| 亚洲最大免费视频网| 亚洲aⅴ无码专区在线观看春色| 国产黄片不卡免费| 18级成人毛片免费观看| 国产成人精品男人免费| 国产av天堂亚洲国产av天堂|