JNI lib crash, with a change in a .c file which is not included inthe Makefile

A

aqura

We are facing an unusual problem, our JNI lib crashes at load time. we
use CentOS 5.4/G++ and VS2005 for development.

scenario: we are currently working on an enhancement in our product
and wanted to pass the new information back to the Java server code
using JNI. our C/C++ code works fine and we have tested it by running
for around 6 hours or so in our dev environment. we have updated two
result structure(which were already present) with one long value each
to pass on the result of our new enhancement.

when we updated the JNI code to pass on the result to Java code, we
found that Java server is crashing while loading JNI, we did debugging
and found that JNI lib crashes, even, when we do not have our changes
in JNI lib code base.

in our further debugging we found that, JNI Makefile includes a .c
file(aa.c), which has a couple of our changes for the new enhancement;
we started with commenting our changes in this aa.c file one by one
and found that the crash happens only when we have BBB.cpp::method1()
call(which we have added, as part of our new enhancement).

The unusual part is, this .c file(aa.c) is not needed in the JNI lib
and we do not have any methods of aa.c called from JNI lib; Now we
have removed aa.c from the JNI Makefile and compile just fine, but
still crashes when we have BBB.cpp::method1() call, if we remove this
method1() call then it works fine.

we are not sure, why/how it is linking to a file which is not
included, in the Makefile and crashing.

this is the error log we see

AgentServer#0 started: OK 12750 [Connection#Cnx:#0.0.1026:0 -
Session#c0s1] ERROR com.xx.xxx.xxxx - Unable to load JNI BBBController
Library java.lang.UnsatisfiedLinkError: /opt/XXXXX/lib/libjnixxx.so:
Can't load IA 32-bit .so on a IA 32-bit platform at
java.lang.ClassLoader$NativeLibrary.load(Native Method) at
java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751) at
java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676) at
java.lang.Runtime.loadLibrary0(Runtime.java:822) at
java.lang.System.loadLibrary(System.java:993)

Please suggest, any idea's would be appreciated.

Thanks in advance,

Aqura
 
J

jacob navia

Le 09/09/11 10:44, aqura a écrit :
We are facing an unusual problem, our JNI lib crashes at load time. we
[snip]

Please suggest, any idea's would be appreciated.

Thanks in advance,

Aqura

1) This is a difficult problem, try to hire a consultant to do that for
you...

2) But anyway: Did you change the compiler version between the old
version and the new one? This looks like a binary incompatibility.

3) What do you mean by "crashes at load time"? A segmentation fault
or just an error message?

If it is an error message it is probably 100% a compiler version
issue. Restore your old compiler and recompile.
 
A

aqura

Le 09/09/11 10:44, aqura a crit :> We are facing an unusual problem, our JNI lib crashes at load time. we

[snip]
Please suggest, any idea's would be appreciated.
Thanks in advance,

1) This is a difficult problem, try to hire a consultant to do that for
you...

2) But anyway: Did you change the compiler version between the old
version and the new one? This looks like a binary incompatibility.

3) What do you mean by "crashes at load time"? A segmentation fault
    or just an error message?

    If it is an error message it is probably 100% a compiler version
issue. Restore your old compiler and recompile.

Hello Jacob,

Thanks for replying.

we are getting

ERROR com.xx.xxx.xxxx - Unable to load JNI BBBController
Library java.lang.UnsatisfiedLinkError: /opt/XXXXX/lib/libjnixxx.so:
Can't load IA 32-bit .so on a IA 32-bit platform at

it is an Error message, which causes application running on TOMCAT to
stop.

Aqura
 
J

jacob navia

Le 09/09/11 12:41, aqura a écrit :
Hello Jacob,

Thanks for replying.

we are getting

ERROR com.xx.xxx.xxxx - Unable to load JNI BBBController
Library java.lang.UnsatisfiedLinkError: /opt/XXXXX/lib/libjnixxx.so:
Can't load IA 32-bit .so on a IA 32-bit platform at

it is an Error message, which causes application running on TOMCAT to
stop.


(1)
For System.loadLibrary() use the short name only, i.e. no path prefix
or dll extension, and make sure the file is in java.library.path or
your search PATH. For example:

System.loadLibrary("sampleDLL2");

For System.load(), specify the full path and filename. For example:
System.load("C:/sampleDLL2.dll");

Did you check those things?
 
A

aqura

Le 09/09/11 12:41, aqura a écrit :

















(1)
For System.loadLibrary() use the short name only, i.e. no path prefix
or dll extension, and make sure the file is in java.library.path or
your search PATH. For example:

System.loadLibrary("sampleDLL2");

For System.load(), specify the full path and filename. For example:
System.load("C:/sampleDLL2.dll");

Did you check those things?

Hi Jacob,

This is a existing source code, where everything was working fine.
the source code, we have taken from the repository and just build it,
without making any changes
and we see the crash.
if we leave the original binary, the server runs fine.

Aqura
 
E

Edek

We are facing an unusual problem, our JNI lib crashes at load time. we
use CentOS 5.4/G++ and VS2005 for development.

[...]

to pass on the result of our new enhancement.
[...]

call(which we have added, as part of our new enhancement).
[...]

I just love the word 'enhancement' used in this
context.
this is the error log we see

AgentServer#0 started: OK 12750 [Connection#Cnx:#0.0.1026:0 -
Session#c0s1] ERROR com.xx.xxx.xxxx - Unable to load JNI BBBController
Library java.lang.UnsatisfiedLinkError: /opt/XXXXX/lib/libjnixxx.so:
Can't load IA 32-bit .so on a IA 32-bit platform at
java.lang.ClassLoader$NativeLibrary.load(Native Method) at
java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751) at
java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676) at
java.lang.Runtime.loadLibrary0(Runtime.java:822) at
java.lang.System.loadLibrary(System.java:993)

- ldd the lib in question, with same path as Java does it
- make sure there is no uncaught exception
- make sure you compile against the right headers
- google
- try getting obtaining the same result with a simple test,
things to try are countless (exception, unclean build (Makefiles),
JNI API misuse, .so depended on another DSO together with placing
them on different paths and with different -Djava.library.path
settings, DSO with unresolved symbols like using newer another DSO's
headers than the other DSO itself, using relative paths, or absolute
paths, full lib name, or just a short name, checking -rpaths and
sonames, and the list goes on)

HTH

Edek
 
J

jacob navia

Le 09/09/11 16:05, Edek a écrit :
- ldd the lib in question, with same path as Java does it
- make sure there is no uncaught exception
- make sure you compile against the right headers
- google
- try getting obtaining the same result with a simple test,
things to try are countless (exception, unclean build (Makefiles),
JNI API misuse, .so depended on another DSO together with placing
them on different paths and with different -Djava.library.path
settings, DSO with unresolved symbols like using newer another DSO's
headers than the other DSO itself, using relative paths, or absolute
paths, full lib name, or just a short name, checking -rpaths and
sonames, and the list goes on)

HTH

Edek

Yes, the list is endless. I thinkthat has to be done by an expert
at their site. Hint: I am not that expert, this looks like those
nightmarish problems to solve to me :)
 
V

Victor Bazarov

We are facing an unusual problem, our JNI lib crashes at load time. we
use CentOS 5.4/G++ and VS2005 for development.
[..]
this is the error log we see

AgentServer#0 started: OK 12750 [Connection#Cnx:#0.0.1026:0 -
Session#c0s1] ERROR com.xx.xxx.xxxx - Unable to load JNI BBBController
Library java.lang.UnsatisfiedLinkError: /opt/XXXXX/lib/libjnixxx.so:
Can't load IA 32-bit .so on a IA 32-bit platform at
java.lang.ClassLoader$NativeLibrary.load(Native Method) at
java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751) at
java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676) at
java.lang.Runtime.loadLibrary0(Runtime.java:822) at
java.lang.System.loadLibrary(System.java:993)

Please suggest, any idea's would be appreciated.

Try asking in 'gnu.g++.help' newsgroup. Java newsgroup might be useful
as well. Seems like your question really not about the C++ *language*,
is it?

V
 

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

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top