To add another comment...
be sure you have a version > JDK1.1.3, because until 1.1.3 JNI didn't
work for me on Linux. JDK1.1.5 did work however!
Cheers,
Addy.
----------
| From: rmlynch / mime, , , [EMAIL PROTECTED]
| To: java-linux / mime, , , [EMAIL PROTECTED]
| Subject: SEGV from iostream in native method on Linux, FreeBSD, not Windoze
| Date: Monday, September 14, 1998 11:01PM
|
| Hi-
|
| Apologize if this is a FAQ. It seems that a "Hello World" JNI demo (see
| below .sig) that uses iostreams for output give a SEGV on Linux and
| FreeBSD, but not Windoze. I didn't have the compiler to build a .dll to
| see the latter case with my own eyes, but someone did it for me and it
| works on Windoze fer shure, I've seen it in action.
|
| Wonder how come?
|
| Bob L.
|
| P.S. Of course the example works when using <stdio.h> and printf(..).
| --
| Robert Lynch-Berkeley CA [EMAIL PROTECTED]
| http://www.best.com/~rmlynch/
| --
| class test
| {
| public native void display();
|
| static { System.loadLibrary("hello"); }
|
| public static void main(String[] args)
| {
| new test().display();
| }
| }
| ---
| /* hello.C */
| #include <jni.h>
| #include "test.h"
| #include <iostream.h>
|
| JNIEXPORT void JNICALL
| Java_test_display(JNIEnv *env, jobject obj)
| {
| cout << "Hello world!\n" << endl;
| return;
| }
| ---
| [user@ravel native]$ g++ -Wall -shared -fPIC
| -I/usr/local/jdk1.1.6/include -I/usr/local/jdk1.1.6/include/genunix -o
| libhello.so hello.C
| ---
| [user@ravel native]$ LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH java test > err
| 2>&1
| Aborted
| [user@ravel native]$ more err
| SIGSEGV 11* segmentation violation
| stackbase=0xbffff668, stackpointer=0xbffff56c
|
| Full thread dump:
| "Finalizer thread" (TID:0x40660208, sys_thread_t:0x413a4e0c,
| state:R) prio=1
| "Async Garbage Collector" (TID:0x40660250, sys_thread_t:0x41383e0c,
| state:R)
| prio=1
| "Idle thread" (TID:0x40660298, sys_thread_t:0x41362e0c, state:R)
| prio=0
| "Clock" (TID:0x40660088, sys_thread_t:0x41341e0c, state:CW) prio=12
| "main" (TID:0x406600b0, sys_thread_t:0x81a4908, state:R) prio=5
| *current thr
| ead*
| test.main(test.java:9)
| Monitor Cache Dump:
| Registered Monitor Dump:
| Thread queue lock: <unowned>
| Name and type hash table lock: <unowned>
| String intern lock: <unowned>
| JNI pinning lock: <unowned>
| JNI global reference lock: <unowned>
| BinClass lock: <unowned>
| Class loading lock: <unowned>
| Java stack lock: <unowned>
| Code rewrite lock: <unowned>
| Heap lock: <unowned>
| Has finalization queue lock: <unowned>
| Finalize me queue lock: <unowned>
| Monitor IO lock: <unowned>
| Child death monitor: <unowned>
| Event monitor: <unowned>
| I/O monitor: <unowned>
| Alarm monitor: <unowned>
| Waiting to be notified:
| "Clock" (0x41341e0c)
| Monitor registry: owner "main" (0x81a4908, 1 entry)
| Thread Alarm Q:
| ----------END msg.------------
|