質問: luaL_newstate(); // Luaのライブラリを使えるようにする luaL_openlibs(lua); // Luaのスクリプトを読み込む luaL_dofile(lua, "hello.lua"); return 0; } ``` ``` -- hello.lua print("Hello, World!") ``` 3liblua.aとリンクしてコンパイル ``` gcc -o test.out test.c -L. -llua ``` ### 問題 3のコンパイルでエラーが出ました。 ``` ./liblua.a(lobject.o): 関数 `numarith.isra.0' 内: lobject.c:(.text+0x1d3): `fmod' に対する定義されていない参照です lobject.c:(.text+0x201): `pow' に対する定義されていない参照です lobject.c:(.text+0x215): `floor' に対する定義されていない参照です ./liblua.a(lvm.o): 関数 `luaV_tointeger' 内: lvm.c:(.text+0x2b7): `floor' に対する定義されていない参照です ./liblua.a(lvm.o): 関数 `luaV_execute' 内: lvm.c:(.text+0x1f0d): `floor' に対する定義されていない参照です lvm.c:(.text+0x2027): `fmod' に対する定義されていない参照です lvm.c:(.text+0x2684): `pow' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_log10' 内: lmathlib.c:(.text+0x9f): `log10' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_pow' 内: lmathlib.c:(.text+0x1b4): `pow' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_tanh' 内: lmathlib.c:(.text+0x1df): `tanh' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_sinh' 内: lmathlib.c:(.text+0x20f): `sinh' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_cosh' 内: lmathlib.c:(.text+0x23f): `cosh' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_tan' 内: lmathlib.c:(.text+0x26f): `tan' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_sqrt' 内: lmathlib.c:(.text+0x2ce): `sqrt' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_sin' 内: lmathlib.c:(.text+0x2ef): `sin' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_log' 内: lmathlib.c:(.text+0x631): `log' に対する定義されていない参照です lmathlib.c:(.text+0x645): `log' に対する定義されていない参照です lmathlib.c:(.text+0x676): `log10' に対する定義されていない参照です lmathlib.c:(.text+0x686): `log' に対する定義されていない参照です lmathlib.c:(.text+0x696): `log2' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_exp' 内: lmathlib.c:(.text+0x6ef): `exp' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_cos' 内: lmathlib.c:(.text+0x71f): `cos' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_atan' 内: lmathlib.c:(.text+0x77c): `atan2' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_asin' 内: lmathlib.c:(.text+0x7af): `asin' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_acos' 内: lmathlib.c:(.text+0x7df): `acos' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_ceil' 内: lmathlib.c:(.text+0x890): `ceil' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_modf' 内: lmathlib.c:(.text+0x8f3): `floor' に対する定義されていない参照です lmathlib.c:(.text+0x971): `ceil' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_floor' 内: lmathlib.c:(.text+0x9a0): `floor' に対する定義されていない参照です ./liblua.a(lmathlib.o): 関数 `math_fmod' 内: lmathlib.c:(.text+0xb0f): `fmod' に対する定義されていない参照です ./liblua.a(loadlib.o): 関数 `lookforfunc' 内: loadlib.c:(.text+0x534): `dlsym' に対する定義されていない参照です loadlib.c:(.text+0x581): `dlerror' に対する定義されていない参照です loadlib.c:(.text+0x5b6): `dlopen' に対する定義されていない参照です loadlib.c:(.text+0x62f): `dlerror' に対する定義されていない参照です ./liblua.a(loadlib.o): 関数 `gctm' 内: loadlib.c:(.text+0x7df): `dlclose' に対する定義されていない参照です collect2: error: ld returned 1 exit status ``` ### 補足 過程1のluaのmakeにあたって、必要だったReadlineライブラリは以下のパッケージから取得しました。 ``` gcc apt-get install liblua5.3-dev ```
回答: Luaに関しては詳しくないのですが、最初に言えることとしては、LuaのモジュールがCのライブラリを必要としているようです。 これらの関数はmath.hとdlfcn.hというヘッダファイルにまとめられていますが、環境変数かオプションで指定しないと読み込んでくれません。 3番目のコンパイルコマンドを gcc -o test.out test.c -L. -llua -lm -lld と変えてみてください。 ある程度エラーが減る。もしくは、無くなるはずです。