java.lang.UnsatisfiedLinkError - native method

A

andrej.frelih

Hello.

I have one problem regarding the native method compilation.
I get the following error for ONLY ONE FUNCTION THAT I RECENTLY ADDED:


Exception in thread "main" java.lang.UnsatisfiedLinkError: helloworld
at
com.hp.openview.ib.api.jopc.JOpcApplication.helloworld(Native Method)
at
com.hp.openview.ib.api.jopc.JOpcApplication.hellokrava(JOpcApplication.java:
854)
at OpcApplication.main(OpcApplication.java:40)


For example the old function ApplModify and ApplGet work fine.

One thing that i have noticed when i run nm(prints the list of common
object names) on the compiled library
is that my NEWLY added helloworld function contains this "__Fv" at the
end of the name that is why i think it cannot be found by the java
class. So i think it is a problem with the library compilation, but i
don't know where to look.

ApplGet| 36088|extern|code |$CODE$
ApplGet| 36088|extern|entry |
ApplModify| 36232|extern|code |$CODE$
ApplModify| 36232|extern|entry |
helloworld__Fv| 36496|extern|entry |
helloworld__Fv| 36496|extern|code |$CODE$

Does anyone have an idea please, or needs more information(code
snapshots).


Regards,
Andrej
 
G

Gordon Beaton

Exception in thread "main" java.lang.UnsatisfiedLinkError: helloworld
[...]

my NEWLY added helloworld function contains this "__Fv" at the end
of the name that is why i think it cannot be found by the java
class.

How (exactly) do you compile the native library? Are you using a C
compiler, or a C++ compiler?

Is the failing method declared with extern "C"? It should be, and it
will be if you exactly obeyed the declaration that javah provided for
you in the generated header file. If the signature of your
implementation differs from that in the header file, the extern "C"
javah provided is no longer helping you.

/gordon

--
 
A

andrej.frelih

Exception in thread "main" java.lang.UnsatisfiedLinkError: helloworld
[...]

my NEWLY added helloworld function contains this "__Fv" at the end
of the name that is why i think it cannot be found by the java
class.

How (exactly) do you compile the native library? Are you using a C
compiler, or a C++ compiler?

I am using the hp-ux aC++ compiler.
Is the failing method declared with extern "C"? It should be, and it
will be if you exactly obeyed the declaration that javah provided for
you in the generated header file. If the signature of your
implementation differs from that in the header file, the extern "C"
javah provided is no longer helping you.

Functions are all marked with extern "C" and i did obey the
declaration( at least i hope so)
of javah.

The .h file looks like that:

extern "C" {
JNIEXPORT jint JNICALL Java_helloworld
(JNIEnv *, jobject);

JNIEXPORT jint JNICALL Java_ApplModify
(JNIEnv *, jobject, jlong, jlong, jlong);

..... there are more functions

}

I very much appreciate your help Gordon.
Need more code?
Regards,
A
 
G

Gordon Beaton

I am using the hp-ux aC++ compiler.

And your command line?
Functions are all marked with extern "C" and i did obey the
declaration( at least i hope so) of javah.

The .h file looks like that:

Of course the generated header file is correct. What does *your* file
look like, in particular the failing method? Do you include the header
file?

/gordon

--
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top