Building LuaJava on Mac OS X
In my previous post about coroutines, I mentioned that I’d be looking into LuaJava (a bridge between Java and the Lua language) as a way to get coroutine behavior in a Java environment. Since I had some time this afternoon, I decided to get LuaJava up and running on my PowerBook. Here are some steps that you can follow to build LuaJava on Mac OS X 10.4.2 Tiger. (I’ve also successfully tested these instructions on Mac OS X 10.3.9 Panther.)
LuaJava requires Lua 5.0, so first we need to download the Lua 5.0 source and build it:
% tar xzvf lua-5.0.tar.gz
% cd lua-5.0
% make
% sudo make install
Next, we need to build LuaJava. Download LuaJava 1.0, then extract it and switch to its directory:
% tar xzvf luajava-1.0.tar.gz
% cd luajava-1.0
Since LuaJava’s config file comes set up for Linux by default, we need to edit it to Mac OS X-friendly settings. Comment the following lines:
#JDK= $(JAVA_HOME)
#LIB_EXT= .so
#LIB_OPTION= -shared
#DLLIB= -ldl
and uncomment the corresponding ones:
JDK=/Library/Java/Home
LIB_EXT= .jnilib
LIB_OPTION= -dynamiclib -all_load
We also need to change the LIB_LUA line to read:
LIB_LUA=/usr/local/lib/liblua.a /usr/local/lib/liblualib.a
With those changes in place, we can just type
% make
and apart from a few JavaDoc warnings, everything should go smoothly. To test it, we can fire up the LuaJava Console:
% java -cp "luajava-1.0.jar" org.keplerproject.luajava.Console
API Lua Java - console mode.
> print('Hello, world!')
Hello, world!
> exit
OK, that looks good. How about the included tests?
% cd test
% ./runawttest.sh
% ./runswingtest.sh
Again, working fine. There are a couple of other Lua test files in the test directory that we can run like so:
% java -cp "../luajava-1.0.jar" -Djava.library.path=..
org.keplerproject.luajava.Console testMemory.lua
(replace testMemory.lua with the name of the file you want to run)
OK, let’s try creating a program of our own. There’s a decent Hello World on the LuaJava examples page, so (after switching back to the luajava-1.0 directory), create the Hello.java and hello.lua files depicted on the examples page. You’ll need to add an import line to the top of Hello.java so that Java knows where to find all the LuaJava objects:
import org.keplerproject.luajava.*;
Once you have the files, compile the Java class:
% javac -classpath luajava-1.0.jar Hello.java
Now run it:
% java -cp luajava-1.0.jar:. Hello
If everything is working correctly, you should see:
Hello World from Lua!
Hello World from Java!
Huzzah! Now we have all the pieces we need to start embedding Lua functionality in Java code.
