Solved

java.lang.UnsatisfiedLinkError

Posted on 2001-09-16
8
466 Views
Last Modified: 2013-11-23
I use a wrapper class HiResTimer (JavaPro Aug.01 p67) which loads a DLL hirestimer.dll in the same directory ( System.loadLibrary("hirestimer");). Everything worked fine. But when I added a package definition to specify a package name, the DLL was loaded, the wrapper class instantated, but on the first call of a method I get a "java.lang.UnsatisfiedLinkError: isHighResTimerAvailable". What's the problem?
0
Comment
Question by:hajava
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
  • +1
8 Comments
 
LVL 92

Expert Comment

by:objects
ID: 6486270
Which directory is your library in?
0
 

Author Comment

by:hajava
ID: 6486977
The library is in directory H:\java\ch\abegglen\nativ. The class is in the same directory. Classpath is H:\java. The intended package name was ch.abegglen.nativ.
0
 
LVL 92

Expert Comment

by:objects
ID: 6486985
Try putting the lib in h:\java or somewhere in your PATH.
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 16

Expert Comment

by:heyhey_
ID: 6487038
> "java.lang.UnsatisfiedLinkError: isHighResTimerAvailable"

it seems that you have changed 'package' statement for some class that contains native methods. since .dll entry for each native method contains full class/package/parameter signatures, when you chnage the package, JavaVM won't be able to find the native method in the .dll.

check the JNI tutorial at www.javasoft.com
0
 

Author Comment

by:hajava
ID: 6494354
heyhey wrote: "since .dll entry for each native method contains full class/package/parameter signatures"

How do I add <package name> to the signature?

In the tutorial I find only one sentence about packages:
"The name of the native language function that implements the native method consists of the prefix Java_, the package name, the class name, and the name of the native method. Between each name component is an underscore "_" separator."

The JNI Spec has an example for a package:
Java_pkg_Cls_f_ILjava_lang_String_2
//where pkg is the package name

But I tried
//hirestimer.cpp
JNIEXPORT jboolean JNICALL Java_ch_abegglen_nativ_HiResTimer_isHighResTimerAvailable
  (JNIEnv *, jobject)
//where ch.abegglen.nativ is the package name
does not have the desired effect. I still have a java.lang.UnsatisfiedLinkError: isHighResTimerAvailable. And this is *after* the library has been loaded from C:\WINDOWS which is in my PATH.

0
 

Author Comment

by:hajava
ID: 6532493
I found the solution, thanks anyway.

I changed the C++ code like this

JNIEXPORT jboolean JNICALL Java_ch_abegglen_nativ_HiResTimer_isHighResTimerAvailable
  (JNIEnv *, jobject)

where ch.abegglen.nativ is the package name. Then I called javah with parameter -classpath %cp% ch.abegglen.nativ.HiResTimer. The resulting HiResTimer.h allowed to compile a usable DLL then.

The DLL can reside in the package directory, not as you suggested.

Thanks.
0
 
LVL 16

Accepted Solution

by:
heyhey_ earned 80 total points
ID: 6532542
I changed the C++ code like this
JNIEXPORT jboolean JNICALL Java_ch_abegglen_nativ_HiResTimer_isHighResTimerAvailable


well that was exactly my suggestion - to use correct .dll entry name (that includes all the package/method/parameters info)

sorry for not posting earlier comment - my main workstation was down for 10 days ...
0
 
LVL 20

Expert Comment

by:Venabili
ID: 8916136
No comment has been added lately, so it's time to clean up this TA.
I will leave a recommendation in the Cleanup topic area that this question is:

- Points for heyhey_

Please leave any comments here within the next seven days.

PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!

Venabili
EE Cleanup Volunteer
0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers learn about the “while” loop and how to utilize it correctly in Java. Additionally, viewers begin exploring how to include conditional statements within a while loop and avoid an endless loop. Define While Loop: Basic Example: Explanatio…
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…

688 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question