*.luaのソースや、.luaのモジュールを、C言語ソースへ変換 [#a60131e6]
#author("2019-04-14T00:56:19+09:00","","")
*.luaソースや.luaのモジュールを、C言語ソースへ変換 [#a60131e6]

**LOOP Precompiler and Preloader (Lua5.1用) [#t42e4399]
-常時利用する.luaファイルは、別ファイルとして持っておくのではなく、~
C側に取り込んでしまいたいものです。~
~
そのような時、[[LOOP Precompiler and Preloader>http://loop.luaforge.net/release/preload.html]]が活躍します。~
~
-Pre-Compilation
-Pre-Compilation~
luaソースをluaとしてコンパイル(チャンク化)し、そのバイトコードの並びを元にC言語のソースを生成します。~
(よって、luaソース内にコメントなどが書かれていても影響しません。~
かつて同じような目的で利用されていた、bin2c だと、lua内のコメントもそのまま変換してしまっていました。)
一度チャンク化しますので、luaソース内にコメントなどが書かれていても影響しません。~
~
-Pre-Loading
複数の依存した.luaファイルをコンパイルする際には、どのファイルが先に存在しなければならないか、

-Pre-Loading~
複数の依存した.luaファイルをコンパイルしたものを実行する際には、~
どのモジュールを先に実行しなければならないか、~
という問題があります。~
.luaでいう
#sh(lua){{
require "hogehoge"
}}
というものを実行するためには、すでにhogehogeに相当するものが''Luaステート上''に存在する必要があるからです。~
このような順番の問題を解決するためのツールがpreloader.luaです。

**bin2c (Lua5.0~Lua5.3) [#r20a7d1e]
-このツールは、Lua5.0までは同封されていたツールとなります。
#sh(lua){{
luac script.lua -o script.luac
bin2c script.luac > strict_code.c
}}
のように利用します。~
luacが無い環境の場合は、[[Luac]]のページを参照してください。~
~
-bin2cが無い場合は、
#ref(../download/tool/bin2c.lua)を利用してください。~
#ref(http://xn--pckzexbx21r8q9b.net/lua_tips/download/tool/bin2c.lua)を利用してください。~
luac.luaやbin2c.luaを使った場合のコマンドは
#sh(lua){{
lua luac.lua script.lua -o script.luac
lua bin2c.lua script.luac > strict_code.c
}}
となります。
~
C言語側で実行したい行で、出力されたCソース(先述の例ならstrict_code.c)をインクルードします。


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS