CからLuaを実行

CのプログラムでLuaの命令を実行してみます。
ここのサンプルをほんのちょっとだけ変更。
http://lua-users.org/wiki/EasyManualLibraryLoad

// lua_test.c
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"

int main(int argc, char* argv[])
{
    lua_State* L;
    L = lua_open();
    luaL_openlibs(L);
    luaL_dostring(L, "print([[Hello World!]])");
    lua_close(L);
    return 0;
}

で、これをコンパイル&実行。

~:$ gcc lua_test.c -I/usr/local/include -L/usr/local/lib -llua
~:$ ./a.exe
Hello world!

できたできた。
ここで指定している"liblua.a"はLuaのmakeで自動的に作られたものなので、「全部入り」です。今後、不要なものなどを削除した自分用のライブラリを作るために準備をしておきます。

~:$ mkdir src/libmylua
~:$ cd src/libmylua
~src/libmylua:$ cp ../lua-5.1.3/src/*.{c,h} .
~src/libmylua:$ rm lua.c print.c luac.c
~src/libmylua:$ cp ~/lua_test.c .
~src/libmylua:$ gcc *.c
~src/libmylua:$ a.exe
Hello World!
~src/libmylua:$ make
~src/libmylua:$ gcc lua_test.c -I. -L. -lmylua
~src/libmylua:$ ./a.exe
Hellow World!

"liblua.a"とりう静的ライブラリを作り、それが動くことを確認しました。ちなみにMakefileの中身はこんな感じです。

CC = gcc
TARGET = libmylua.a
OBJ = lapi.o lauxlib.o lbaselib.o lcode.o ldblib.o ldebug.o ldo.o \
	  ldump.o lfunc.o lgc.o linit.o liolib.o llex.o lmathlib.o lmem.o \
	  loadlib.o lobject.o lopcodes.o loslib.o lparser.o lstate.o lstring.o \
	  lstrlib.o ltable.o ltablib.o ltm.o lundump.o lvm.o lzio.o 

all: $(TARGET)

$(TARGET): $(OBJ)
	ar r $(TARGET) $(OBJ)
	ranlib $@

.c.o:
	$(CC) -c $<

clean:
	rm *.o *.a

ひとまずこれで環境はできあがりました。ここからが本番です。容量が200kBもあるのが不安。。。