Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

java.lang.UnsatisfiedLinkError

Posted on 2001-09-16
8
Medium Priority
?
489 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
  • 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
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
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 320 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

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

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

For beginner Java programmers or at least those new to the Eclipse IDE, the following tutorial will show some (four) ways in which you can import your Java projects to your Eclipse workbench. Introduction While learning Java can be done with…
This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …
Viewers will learn about arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Boole…
Suggested Courses
Course of the Month14 days, 9 hours left to enroll

578 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