How does the JVM find Native functions?
hwadechandler-openjdk at yahoo.com
hwadechandler-openjdk at yahoo.com
Wed Jan 26 16:03:01 UTC 2011
http://java.sun.com/docs/books/jni/html/objtypes.html#24512
Is a good simple start. But, if you used javah, then it should have defined the
functions needed to be implemented. Are you sure it is loading your library? How
do you know for sure? Do you have a static section using System.loadLibrary and
there is no exception raised there? If it is throwing an exception there, then
it most likely isn't finding the library, and definitely isn't loading it. It
may be it is finding your library, but is failing to load some other dependency
as well.
You can hook up a debugger in your C environment and set a break point in what
ever entry point you have in the DLL/SO to know if it is loading that at least.
If the actual file is being hooked into the JVM and loaded and the entry point
called, then it may be a naming issue. Did you change your function names to
something other than what javah output in your headers?
See the overall book from above:
http://java.sun.com/docs/books/jni/html/jniTOC.html
Is a good way to go. Too, if your classes with the native methods are in
packages, then notice the Java_my_package_myFunction naming scheme. That is all
that is needed as long as you are outputting a C library. If you are using C++
then you will have to use extern "C" to make sure name mangling doesn't occur.
If you don't know about name mangling, then just google it, and you'll find what
you need.
Hope something helps,
Wade
==================
Wade Chandler
Software Engineer and Developer
NetBeans Dream Team Member and Contributor
http://wiki.netbeans.org/wiki/view/NetBeansDreamTeam
http://www.netbeans.org
----- Original Message ----
> From: John J. Boyer <john.boyer at abilitiessoft.com>
> To: discuss at openjdk.java.net
> Sent: Tue, January 25, 2011 11:28:04 PM
> Subject: How does the JVM find Native functions?
>
> I have created bindings for a C library. The Java program seems to load
> the library, but when I try to use a method which is declared native I
> always get UnsatisfiedLinkError. I used javah to create the headings,
> then derived the program from the headings. It looks to me like the
> methods have to be registered in some way. How do I go about this? How
> does the JVM find the native function corresponding to a native method?
>
> Thanks,
> John
>
> --
> John J. Boyer; President, Chief Software Developer
> Abilitiessoft, Inc.
> http://www.abilitiessoft.com
> Madison, Wisconsin USA
> Developing software for people with disabilities
>
>
More information about the discuss
mailing list