From: Bob M. <rma...@ee...> - 2006-06-13 20:44:55
|
William S Fulton wrote: > Bob Marinier wrote: > >> Sorry, attached example.java instead of main.java. Reattaching. >> >> Bob >> >> Bob Marinier wrote: >> >>> I've been trying to use the new -fvisibility=hidden stuff to improve >>> my libraries. It works great in Tcl, but in Java it seems to fail at >>> runtime when there's a static method in a class. I've attached a >>> simple example. I do the following with it: >>> >>> $ swig -c++ -java example.i >>> $ g++ -c -fpic -fvisibility=hidden example_wrap.cxx >>> -I/opt/sun-jdk-1.4.2.10/include -I/opt/sun-jdk-1.4.2.10/include/linux >>> $ g++ -shared example_wrap.o -o libexample.so >>> $ javac *.java >>> $ java main >>> >>> This results in this error: >>> >>> Creating some objects: >>> Exception in thread "main" java.lang.UnsatisfiedLinkError: >>> Shape_CreateShape >>> at exampleJNI.Shape_CreateShape(Native Method) >>> at Shape.CreateShape(Shape.java:36) >>> at main.main(main.java:16) >>> >>> If I change -fvisibility=hidden to -fvisibility=default, then it works >>> fine. >>> >>> I'm using g++ 4.1.1 on a Gentoo Linux system with SWIG 1.3.29. >>> >>> > > > >>> >>> ------------------------------------------------------------------------ >>> >>> /* File : example.i */ >>> %module example >>> >>> > > // Add this in here: > %{ > #undef JNIEXPORT > #define JNIEXPORT SWIGEXPORT > %} > > >>> %{ >>> #include "example.h" >>> %} >>> >>> /* Let's just grab the original header file here */ >>> %include "example.h" >>> >>> >>> > > or use the CVS version. I've made the cvs version use SWIGEXPORT instead > of JNIEXPORT for the generated JNI wrappers. I was a bit hesitant to > make this change, so if anyone is using an unusual platform, post your > definition of JNIEXPORT from jni.h or jni_md.h, so we can check for > differences between SWIGEXPORT and JNIEXPORT. I've got linux, windows > and solaris covered. > > William > It works! Thanks! Bob |