2016-06-02 2 views
2

J'essaie de créer une bibliothèque partagée C qui utilise LuaJIT et l'utilise en Java via JNI. Ma plate-forme est OS X (El Capitan).Compilation de la bibliothèque partagée JNI, qui utilise LuaJIT

gcc -Wall -shared -fpic \ ath_lua_runtime_foundation_LuaScriptApi.c \ -ILuaJIT-2.0.4/src/ \ -I/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/include/darwin/ \ -I/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/include/ \ -L. \ -lluajit \ -o libEmbeddedLua.jnilib

Il compile correctement, mais quand je l'appelle sa fonction en Java, il se bloque JVM

SIGSEGV (0xb) at pc=0x00007fff04c5bcd0, pid=37283, tid=5891 ... Problematic frame: C [libluajit-5.1.2.dylib+0x11cd0] lua_pushcclosure+0x10

Comme mentionné dans la documentation, pour OS X que je devrais utiliser suivant params GCC (et fonctionne quand je la construction exécutable de test):

-pagezero_size 10000 -image_base 100000000

mais ces paramètres ne sont valides que pour les exécutables et non pour une bibliothèque partagée.

La question est de savoir comment le faire fonctionner dans une bibliothèque partagée.

Répondre

0

J'ai eu ce même problème. Ceci est spécifiquement un problème sur macOS 64 bits et Mike Pall en parle here. Si vous compilez un LuaJIT 32 bits à partir de la source, alors les choses vont fonctionner. Pour construire le binaire luajit 32 bits, vous pouvez exécuter la commande suivante dans le répertoire luajit:

CFLAGS="-arch i386" GCCFLAGS="-arch i386" LDFLAGS="-arch i386" make && sudo make install