我使用http://lua-users.org/wiki/SimpleLuaApiExample中的一个简单示例进行测试。该示例可以成功地与 libluajit.a 静态链接,但是在运行它时会出现此错误消息:
Segmentation fault: 11
我使用 2012-11-08 发布的 LuaJIT-2.0.0。我的操作系统是 Mac OSX Lion 10.7.5。
$ uname -a
Darwin macmatoMacBook-Pro.local 11.4.2 Darwin Kernel Version 11.4.2: Thu Aug 23 16:25:48 PDT 2012; root:xnu-1699.32.7~1/RELEASE_X86_64 x86_64
测试步骤:
编译 luajit-2.0.0
$ cd lj2
$ ls
COPYRIGHT Makefile README doc dynasm etc src
$ make
==== Building LuaJIT 2.0.0 ====
make -C src
DYNLINK libluajit.so
LINK luajit
OK Successfully built LuaJIT
==== Successfully built LuaJIT 2.0.0 ====
$ rm src/*.so # force to use the static version: libluajit.a
$ cd ..
编译并运行示例应用程序
test.c和script.lua都来自这里。文件夹lj2包含了上面luajit-2.0.0的源码,刚刚编译成功。
$ ls
lj2 script.lua test.c
使用 clang 编译器
$ clang -o test test.c -I./lj2/src -L./lj2/src -lluajit
$ ./test
Segmentation fault: 11
使用 gcc 编译器
$ gcc -o test test.c -I./lj2/src -L./lj2/src -lluajit
$ ./test
Segmentation fault: 11
但是如果我用 test.c 替换 lj2/src/luajit.c,它会给我一个成功的。这很奇怪。见下文:
$ cd lj2
$ make clean
$ mv src/luajit.c src/luajit.c.orig
$ cp ../test.c src/luajit.c
$ make
$ cp src/luajit ../
$ cd ..
$ ./luajit
The table the script received has:
1 2
2 4
3 6
4 8
5 10
Returning data back to C
Script returned: 30