...
If I do main() && luaL_newstate() && luaopen_test() && luaL_dostring() in test.c, it's all ok.
It seems that problem is in test.so itself… Is my test.so build process okay?
...
$ cc test.c -shared -o test.so -llua -lm
I think that is the problem. You shouldn't link with -llua in your .so.