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

実行できた。


C言語よりgccのパラメータの順番とか、ldとかのほうが難しいなあ。
そういうの勉強したほうがいいのかな。