On Thu, Sep 01, 2005 at 08:15:29PM -0400, Patrick LeBoutillier wrote:
> Hi guys,
>
> Sorry but I can't help you out here since I don't have access to a Mac OS X
> machine (as a matter of fact I have never even used one...).
[obligatory recommendation elided]
> I don't know about the JNI bit, but the default client/server should
> be able to work.
>
> Tim, in your first post you were almost there, having problems only
> with the tests that fork themselves to connect to a "shared" JVM. I
> noticed that you sometimes ran into errors like this:
>
> Can't locate object method "new" via package "t10::t10" ...
>
> Normally these sorts of errors happen when Inline::Java died and the
> cache file that contains the information about the Java class is
> incomplete/empty. If you remove the Inline directory (in this case
> _Inline_test), you should see the "real" error pop up again. I don't
> know about the "Bad file descriptor" error though...
>
> Anyways if you need more info on how things work or if you come up
> with a patch that I can include (maybe Andy's is ok as is?),
It helped but didn't address the JNI issues. I've attached a patch to
to on top of Andy's that fixes JNI for OSX. (The last hunk is messy due
to fixing the indentation, but the only significant addition is
OTHERLDFLAGS => '-framework JavaVM')
Tim.
> On 9/1/05, Andrew Bruno <[EMAIL PROTECTED]> wrote:
> > Hi,
> >
> > I recently ran into the same troubles with Mac OSX. I'm completely new to
> > Inline::Java and not very comfortable with the internals but with a little
> > tinkerning I was able to get it working. Not sure if this is the right way
> > but
> > attached is a patch file.
> >
> > In short, I added some more defaults into Portable.pm for darwin and in
> > Java/Makefile.PL I had to change the call to find(..) which passed in
> > follow => 1 to follow_fast => 1 because of the symlinks.
> >
> > Then just ran:
> >
> > perl perl Makefile.PL
> > J2SDK=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
> > make java
> > make
> > make test
> > make install
> >
> > Well, hope this might be of some help.
> >
> > --Andy
> >
> > On Thu, Sep 01, 2005 at 10:49:41PM +0100, Tim Bunce wrote:
> > > On Tue, Aug 30, 2005 at 05:18:45PM -0500, [EMAIL PROTECTED] wrote:
> > > >
> > > > > From: Tim Bunce [mailto:[EMAIL PROTECTED]
> > > > >
> > > > > Can't locate file 'libjvm.bundle' anywhere under
> > > > > '/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home'
> > > > > Writing Makefile for Inline::Java
> > > >
> > > > [...]
> > > >
> > > > > make[1]: Makefile: No such file or directory
> > > > > make[1]: *** No rule to make target `Makefile'. Stop.
> > > > > make: *** [subdirs] Error 2
> > > > >
> > > > > Any ideas?
> > > >
> > > > Ordinarily a Makefile will be created in both the top-level directory
> > > > and the Java/ directory. I think it bombed out when trying to create
> > > > one or the other.
> > >
> > > The make failed because the Java/Makefile.PL exits 'successfully' but
> > > without creating a Makefile after printing the "Can't locate ..." warning.
> > >
> > > > Looking on my office Mac (OS X 10.4.2), I see three libjvm files, none
> > > > of which is "libjvm.bundle":
> > > >
> > > > /System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Libraries/libjvm.dylib
> > > > /System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Libraries/libjvm.dylib
> > > > /System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Libraries/libjvm_compat.dylib
> > > >
> > > > So I think:
> > > >
> > > > a) Perhaps it should be looking for "libjvm.$Config{so}" instead of
> > > > "libjvm.$Config{dlext}".
> > > >
> > > > b) It probably *still* won't find it, so either it needs to be able to
> > > > look in other directories besides those under $J2SDK, or you'll have to
> > > > create a symlink from somewhere under $J2SDK to
> > > > /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Libraries/
> > > > or something.
> > > >
> > > > Note that I'm not speaking from the point of view of someone who's
> > > > actually got this working - I'm just speculating, since last time I
> > > > tried this I was on 10.3, and I never got it working that time either.
> > >
> > > Now I come to look again I've made some progress with your help. Thanks!
> > >
> > > I've added a symlink in .../Home/lib/libjvm.dylib ->
> > > ../../Libraries/libjvm.dylib
> > > (libjvm.dylib is itself a symlink to libhotspot.dylib) and added
> > > JVM_LIB => "libjvm.$Config{so}",
> > > JVM_SO => "libjvm.$Config{so}",
> > > into the darwin section of Java/Portable.pm
> > >
> > > The linker command line now looks like:
> > >
> > >
> > > LD_RUN_PATH="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/lib"
> > > env MACOSX_DEPLOYMENT_TARGET=10.3 cc -bundle -undefined dynamic_lookup
> > > -L/usr/local/lib -L/opt/local/lib JNI.o -o
> > > ../blib/arch/auto/Inline/Java/JNI/JNI.dylib
> > >
> > > -L/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/lib
> > > -ljvm
> > >
> > > and otool -L blib/arch/auto/Inline/Java/JNI/JNI.dylib says:
> > >
> > > blib/arch/auto/Inline/Java/JNI/JNI.dylib:
> > >
> > > /System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Libraries/libhotspot.dylib
> > > (compatibility version 1.0.0, current version 1.0.0)
> > > /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
> > > version 88.0.0)
> > >
> > > but the tests still fail with:
> > >
> > > t/01_init..............dyld: NSLinkModule() error dyld: Symbol not found:
> > > _JNI_CreateJavaVM
> > > Referenced from:
> > > /Users/timbo/.cpan/sources/authors/id/P/PA/PATL/Inline-Java-0.50/blib/arch/auto/Inline/Java/JNI/JNI.bundle
> > > Expected in: dynamic lookup
> > >
> > > I don't have sufficient OSX Foo to know what to try next.
> > > Is the _JNI_CreateJavaVM entrypoint in some other library?
> > > (grep -l -a -r _JNI_CreateJavaVM ... only finds it in that one.)
> > >
> > > Any ideas?
> > >
> > > Tim.
> >
> >
> >
>
>
> --
> =====================
> Patrick LeBoutillier
> Laval, Qu?bec, Canada
diff -u -r Inline-Java-0.50.andy-patch/Java/Makefile.PL
Inline-Java-0.50.tb/Java/Makefile.PL
--- Inline-Java-0.50.andy-patch/Java/Makefile.PL 2005-09-02
17:17:35.000000000 +0100
+++ Inline-Java-0.50.tb/Java/Makefile.PL 2005-09-02 17:32:26.000000000
+0100
@@ -162,6 +162,7 @@
PMLIBDIRS => [File::Spec->catdir('sources',
'org', 'perl', 'inline', 'java')],
INC => join(' ', @main::I),
LIBS => [join(' ', @main::L) . " -ljvm"],
+ dynamic_lib => { OTHERLDFLAGS =>
Inline::Java::Portable::portable('OTHERLDFLAGS') },
# CCFLAGS => '-D_REENTRANT',
) ;
}
diff -u -r Inline-Java-0.50.andy-patch/Java/Portable.pm
Inline-Java-0.50.tb/Java/Portable.pm
--- Inline-Java-0.50.andy-patch/Java/Portable.pm 2005-09-02
17:17:35.000000000 +0100
+++ Inline-Java-0.50.tb/Java/Portable.pm 2005-09-02 17:30:57.000000000
+0100
@@ -162,6 +162,7 @@
PERL_PARSE_DUP_ENV => '-DPERL_PARSE_DUP_ENV',
J2SDKBIN => 'bin',
BUILD_JNI_BY_DFLT => 1,
+ OTHERLDFLAGS => '',
} ;
my $map = {
@@ -226,12 +227,15 @@
darwin => {
# Suggested by Ken Williams, mailing list 2004/07/07
SO_EXT => $Config{so},
+ # Andrew Bruno:
JVM_LIB => "libjvm.dylib",
JVM_SO => "libjvm.dylib",
- PRE_WHOLE_ARCHIVE => '-Wl',
- POST_WHOLE_ARCHIVE => '-Wl',
- GOT_SYMLINK => 1,
- J2SDKBIN => 'Commands',
+ PRE_WHOLE_ARCHIVE => '-Wl',
+ POST_WHOLE_ARCHIVE => '-Wl',
+ GOT_SYMLINK => 1,
+ J2SDKBIN => 'Commands',
+ # Tim Bunce:
+ OTHERLDFLAGS => '-framework JavaVM',
},
} ;