luajit2.0.0 Kesalahan segmentasi: 11

Saya menggunakan contoh sederhana dari http://lua-users.org/wiki/SimpleLuaApiExample untuk melakukan pengujian. Sampel dapat ditautkan secara statis dengan libluajit.a dan berhasil, tetapi pesan kesalahan ini muncul saat Anda menjalankannya:

Segmentation fault: 11

Saya menggunakan LuaJIT-2.0.0 yang dirilis pada 08-11-2012. OS saya adalah 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

Langkah-langkah pengujian:

kompilasi 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 ..

kompilasi dan jalankan aplikasi sampel

Baik test.c dan script.lua berasal dari di sini. Folder lj2 berisi kode sumber luajit-2.0.0 di atas, baru saja berhasil dikompilasi.

$ ls
lj2 script.lua test.c 
use clang compiler
$ clang -o test test.c -I./lj2/src -L./lj2/src -lluajit
$ ./test
Segmentation fault: 11
use gcc compiler
$ gcc -o test test.c -I./lj2/src -L./lj2/src -lluajit
$ ./test 
Segmentation fault: 11

Tetapi jika saya mengganti lj2/src/luajit.c dengan test.c, itu akan memberi saya kesuksesan. Ini sangat aneh. Lihat di bawah:

$ 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  

person douyw    schedule 13.11.2012    source sumber
comment
Anda mungkin harus melakukan sudo make install sebagai bagian dari pembangunan luajit. Juga mengapa Anda ingin menautkannya secara statis?   -  person finnw    schedule 13.11.2012
comment
@finnw Saya ingin menyematkan luajit di aplikasi saya.   -  person douyw    schedule 13.11.2012


Jawaban (1)


Masalah terpecahkan. Ada bagian yang menjelaskan cara Menyematkan LuaJIT di halaman ini:
http://luajit.org/install.html

  • Jika Anda membuat aplikasi 64 bit di OSX yang menghubungkan langsung atau tidak langsung ke > LuaJIT, Anda perlu menghubungkan executable utama Anda dengan tanda berikut:

    -pagezero_size 10000 -image_base 100000000

Selain itu, disarankan untuk melakukan rebase semua pustaka bersama (yang dikompilasi sendiri) yang dimuat saat runtime di OSX/x64 (misalnya modul ekstensi C untuk Lua). Lihat: man rebase

Sekarang, izinkan saya mengujinya lagi:

$ 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: 30

Dan valgrind kembali

$ valgrind ./test
bad executable (__PAGEZERO is not 4 GB)
valgrind: ./test: cannot execute binary file

Itu pertanyaan lain.

person douyw    schedule 13.11.2012