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もあるのが不安。。。