luajit2.0.0 -- 分段错误:11
2012-11-13 11:16:43
收藏:0
阅读:151
评论:1
我使用了一个来自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
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
问题已解决。本文中有一节讲解如何嵌入 LuaJIT:
http://luajit.org/install.html
如果你在 OSX 上构建直接或间接链接到 LuaJIT 的 64 位应用程序,则需要使用以下标志将主可执行文件链接起来:
-pagezero_size 10000 -image_base 100000000
此外,在 OSX/x64 上运行时加载的所有(自编译的)共享库(例如 Lua 的 C 扩展模块)都建议重新编址。请参考:man rebase
现在让我再测试一遍:
$ clang -o test test.c -O3 -I./lj2/src -L./lj2/src -lluajit -pagezero_size 10000 -image_base 100000000 $ ./test The table the script received has: 1 2 2 4 3 6 4 8 5 10 Returning data back to C Script returned: 30valgrind 返回:
$ valgrind ./test bad executable (__PAGEZERO is not 4 GB) valgrind: ./test: cannot execute binary file这是另一个问题。