| 1 | Just-JNI (call into Java from Perl only)
|
|---|
| 2 | ----------------------------------------
|
|---|
| 3 |
|
|---|
| 4 | This has been tested with:
|
|---|
| 5 |
|
|---|
| 6 | Debian GNU/Linux 2.2 i386, perl 5.6.0, Kaffe (CVS, 2000-12-05 or later)
|
|---|
| 7 | RedHat 6.1, perl-5.00503-6 (RedHat RPM), IBM JDK 1.1.8
|
|---|
| 8 | Debian 2.1 SPARC, Perl 5.005_60, JDK 1.2 beta (crashes with AWT, though)
|
|---|
| 9 | Windows NT 4.0 SP4, ActivePerl 519, JDK 1.1.8, Visual C++
|
|---|
| 10 | Solaris 7, Perl 5.005_03, JDK 1.1.6, GCC 2.8.1
|
|---|
| 11 |
|
|---|
| 12 | Solaris 7 Note (this probably applies to all native thread situations):
|
|---|
| 13 |
|
|---|
| 14 | Native threads were tricky. I had to build my own Perl, configured with:
|
|---|
| 15 |
|
|---|
| 16 | sh Configure -Dprefix=/opt/perl5.005 -Duseshrplib -Doptimize=-g \
|
|---|
| 17 | -Uusemymalloc -D cc=gcc -Dusethreads -d
|
|---|
| 18 |
|
|---|
| 19 | When Configure let me edit config.sh, I changed libs to:
|
|---|
| 20 |
|
|---|
| 21 | libs='-lthread -lsocket -lnsl -ldl -lm -lposix4 -lpthread -lc -lcrypt'
|
|---|
| 22 |
|
|---|
| 23 | The leading -lthread is the only thing I had to add.
|
|---|
| 24 |
|
|---|
| 25 | Kaffe Note:
|
|---|
| 26 |
|
|---|
| 27 | I believe that Kaffe with JIT enabled will likely be problematic. I had a
|
|---|
| 28 | lot of trouble with it, that simply went away with interpreter-based Kaffe.
|
|---|
| 29 | FWIW, here's how I configured Kaffe:
|
|---|
| 30 |
|
|---|
| 31 | env AM_CPPFLAGS=-DDEBUG CFLAGS="-O0 -ggdb" ./configure --disable-gcj \
|
|---|
| 32 | --with-engine=intrp
|
|---|
| 33 |
|
|---|
| 34 | Likely you don't need all that debugging stuff.
|
|---|
| 35 |
|
|---|
| 36 | Also, when I build perl, I do this, to be on the safe side. I was worried
|
|---|
| 37 | about thread interaction, but realized there was no need to build threaded
|
|---|
| 38 | perl, but I thought that the perl code should probably be reentrant, so, I
|
|---|
| 39 | did this:
|
|---|
| 40 |
|
|---|
| 41 | sh ./Configure -Dcc=gcc -Doptimize='-D_REENTRANT -DDEBUGGING -ggdb' \
|
|---|
| 42 | -Dlibperl='libperl.so' -Duseshrplib='true'
|
|---|
| 43 |
|
|---|
| 44 | Again, you likely don't need the debugging flags.
|
|---|
| 45 |
|
|---|
| 46 |
|
|---|
| 47 | How do I do this crazy thing?
|
|---|
| 48 | -----------------------------
|
|---|
| 49 |
|
|---|
| 50 | 1) Cd into the JPL directory. Type the following:
|
|---|
| 51 |
|
|---|
| 52 | perl Makefile.PL
|
|---|
| 53 | make
|
|---|
| 54 | make install
|
|---|
| 55 |
|
|---|
| 56 | Under windows, that's:
|
|---|
| 57 |
|
|---|
| 58 | perl Makefile.PL
|
|---|
| 59 | nmake
|
|---|
| 60 | nmake install
|
|---|
| 61 |
|
|---|
| 62 | 3) cd into the JNI directory (cd ../JNI or cd ..\JNI)
|
|---|
| 63 |
|
|---|
| 64 | 4) We now need to compile and make the Closer.class available to your
|
|---|
| 65 | JPL program. Closer is a WindowListener that closes the Frame we
|
|---|
| 66 | make in the test program.
|
|---|
| 67 |
|
|---|
| 68 | It seems that we've managed to fix the problem with CLASSPATH not
|
|---|
| 69 | getting propagated to the JVM, so if '.' is in your CLASSPATH, you
|
|---|
| 70 | should be able to compile Closer.java and leave it in the current
|
|---|
| 71 | directory:
|
|---|
| 72 |
|
|---|
| 73 | javac Closer.java
|
|---|
| 74 |
|
|---|
| 75 | or perhaps
|
|---|
| 76 |
|
|---|
| 77 | jikes Closer.java
|
|---|
| 78 |
|
|---|
| 79 | 5) Make the demo:
|
|---|
| 80 |
|
|---|
| 81 | a) type the following:
|
|---|
| 82 |
|
|---|
| 83 | for SUN's proprietary software Java:
|
|---|
| 84 |
|
|---|
| 85 | env JAVA_HOME=/path/to/java perl Makefile.PL
|
|---|
| 86 | # setting the JAVA_HOME enviornment variable might not be needed
|
|---|
| 87 | # if Java is in installed in a canonical location
|
|---|
| 88 | make
|
|---|
| 89 | make test
|
|---|
| 90 |
|
|---|
| 91 | for Kaffe:
|
|---|
| 92 |
|
|---|
| 93 | env KAFFE_PREFIX=/kaffe/installation/prefix perl Makefile.PL
|
|---|
| 94 | # setting the KAFFE_PREFIX enviornment variable might not be needed
|
|---|
| 95 | # if Kaffe is in a canonical location
|
|---|
| 96 | make
|
|---|
| 97 | make test
|
|---|
| 98 |
|
|---|
| 99 | Under Windows:
|
|---|
| 100 |
|
|---|
| 101 | perl Makefile.PL
|
|---|
| 102 | nmake
|
|---|
| 103 | nmake test
|
|---|
| 104 |
|
|---|
| 105 |
|
|---|
| 106 | b) if all went well, type:
|
|---|
| 107 |
|
|---|
| 108 | make install
|
|---|
| 109 |
|
|---|
| 110 | or, under Windows:
|
|---|
| 111 |
|
|---|
| 112 | nmake install
|
|---|
| 113 |
|
|---|