Ubuntu10.10 64bitでC言語のアプリケーションにLuaを組み込もうとして試行錯誤したメモ
簡単に組み込めるんだろう、と思ってやってみたら全然ダメで、結構苦しんだのでその時のメモ。
環境:Ubuntu10.10 64bit / Lua 5.1.4 / gcc 4.4.5
C言語側は同じディレクトリにあるmain.luaを読んで実行するだけのコード。
/* main.c */ #include <lua.h> #include <lualib.h> #include <lauxlib.h> int main(void) { lua_State *L = luaL_newstate(); luaL_openlibs(L); luaL_dofile(L, "main.lua"); lua_close(L); return 0; }
Windows/Macでコンパイルしたようにやってみると……
$ gcc main.c -o main -I./lua-5.1.4/src -L./lua-5.1.4/src -llua ./lua-5.1.4/src/liblua.a(lvm.o): In function `Arith': lvm.c:(.text+0xa85): undefined reference to `pow' lvm.c:(.text+0xab4): undefined reference to `floor' ./lua-5.1.4/src/liblua.a(lvm.o): In function `luaV_execute': lvm.c:(.text+0x2299): undefined reference to `floor' lvm.c:(.text+0x2374): undefined reference to `pow' (略)
なんか数学関数系が無いとかいうエラーが。それ関係のライブラリを付ける必要があるみたい。
$ gcc main.c -o main -I./lua-5.1.4/src -L./lua-5.1.4/src -llua -lm ./lua-5.1.4/src/liblua.a(loadlib.o): In function `ll_loadfunc': loadlib.c:(.text+0x8d8): undefined reference to `dlsym' loadlib.c:(.text+0x931): undefined reference to `dlopen' loadlib.c:(.text+0x949): undefined reference to `dlerror' loadlib.c:(.text+0x960): undefined reference to `dlerror' ./lua-5.1.4/src/liblua.a(loadlib.o): In function `gctm': loadlib.c:(.text+0xe9c): undefined reference to `dlclose' collect2: ld returned 1 exit status
またしてもエラー。これもライブラリを付ける必要があるようで……
$ gcc main.c -o main -I./lua-5.1.4/src -L./lua-5.1.4/src -llua -lm -ldl
コンパイルできた。
$ echo 'print("aaa")' > main.lua $ ./main aaa
実行できた。