Difference between Mac and Windows JNI

Mike Swingler swingler at apple.com
Wed Jan 16 15:15:52 PST 2013


On Jan 16, 2013, at 3:11 PM, "Jenks, Robert" <rjenks at ti.com> wrote:

> I would like to ask (and I'm not sure if I should enter a bug/RFE in
> Oracle's java bug DB or not) that the definition of JNIEXPORT be changed
> for mac.
> 
> I am in the process of moving a large cross-platform java/native
> application from Apple Java 1.6 to Oracle Java 1.7 on mac and ran into an
> issue.
> 
> JNIEXPORT is defined in jni_md.h on each platform:
> 
> Oracle Java for Windows:  #define JNIEXPORT __declspec(dllexport)
> Apple Java for Mac:       #define JNIEXPORT
> __attribute__((visibility("default")))
> Oracle Java for Mac:      #define JNIEXPORT
> 
> The Oracle Java for Mac case is problematic if not broken.
> 
> In case it is not well understood, let me give some background.  On
> Windows when you build a DLL functions have to be explicitly marked as
> '__declspec(dllexport)'  to make them callable from outside the DLL.
> Oracle java on windows' JNIEXPORT does this for you automatically.  On
> Mac, GCC by default exports every function as callable from outside the
> dylib.  However, to mimic the same behavior many developers build with
> '­fvisibility=hidden' to set the default to hidden (or do not export from
> the dylib).  With Apple java JNIEXPORT properly defines that JNI functions
> must be callable from outside the dylib.  Oracle's doesn't.  Therefore if
> you compile with default settings everything works as expected.  If you
> compile with -fvisibility=hidden your JNI functions won't be exported from
> the dylib.  
> 
> This worked with Apple's Java, but doesn't with Oracle's.  That, in
> itself, isn't the issue, but I think that this should be consistent
> between Oracle's Windows and Mac versions.  JNI functions should be
> explicitly marked as exported from shared libraries by using the JNIEXPORT
> macro.
> 
> I can work around this, but I would hope that this would be changed.  To
> me this is a bug, but I could see the argument the other way too.  What is
> the best way to proceed to officially request this change?

Please file this as a bug at <http://bugs.sun.com>.

Thanks,
Mike Swingler
Apple Inc.



More information about the macosx-port-dev mailing list