[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [cdt-debug-dev] question on how cdt make JNI call?
|
Yes, I missed the package name, Problem solved!! Thank you so much!!
On Fri, 2004-11-05 at 13:29, Alex Chapiro wrote:
> First, verify native methods signature in C code. It should be exactly
> the same as javah generated. In your case they I wrong I suppose. You
> can see how valid names look like in spawner.dll sources. Your names
> miss package signature. It should be:
>
> Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_greeting(...)
>
> I guess you've got wrong header because you ran javah from the wrong
> working directory.
>
> Regards,
>
> Alex.
>
> Yan Chen wrote:
>
> >Hi,all!!!
> >
> >I know this question maybe should not be asked in this mailing list, but
> >my question is somehow related to CDT codes. So any help is
> >appreciated!!!
> >
> >My plugin need to load dynamic library and make JNI call, but until now
> >I do not have any luck. Under terminal I can load .so and make JNI call
> >without any problem, but I have no idea why my eclipse plugin can not
> >make JNI call(by using system.load() or system.loadLibrary()). To
> >access native libraries in eclipse Do I need to set up correctly the
> >path in the plugin.xml? and how?
> >
> >By reading CDT code, I found CDT also make JNI call, so I did a test as
> >follows:
> >
> >I first made libSpawnerOutputStream.so and then I put it in the
> >directory org.eclipse.cdt.core.linux/os/linux/x86 where libspawner.so
> >is. Then I added my stuff in the class SpawnerOutputStream as follows:
> >
> >public class SpawnerOutputStream extends OutputStream {
> >
> >
> > public void write(byte[] b, int off, int len) throws IOException
> >{
> >
> > write0(fd, tmpBuf, len);
> >
> > /*****My stuff**********/
> > greeting();
> > /*****My stuff**********/
> > }
> >
> > private native int write0(int fd, byte[] b, int len) throws
> >IOException;
> > private native int close0(int fd);
> >
> > /*****My stuff**********/
> > public static native void greeting();
> > /*****My stuff**********/
> >
> >
> > static {
> > System.loadLibrary("spawner"); //$NON-NLS-1$
> >
> > /*****My stuff**********/
> > System.loadLibrary("SpawnerOutputStream");
> > /*****My stuff**********/
> > }
> >
> >}
> >
> >But when I start debugging a c program, I got the following error:
> >
> >java.lang.UnsatisfiedLinkError: greeting
> > at
> >org.eclipse.cdt.utils.spawner.SpawnerOutputStream.greeting(Native
> >Method)
> > at
> >org.eclipse.cdt.utils.spawner.SpawnerOutputStream.write(SpawnerOutputStr
> >eam.java:50)
> > at java.io.OutputStream.write(OutputStream.java:58)
> > at org.eclipse.cdt.debug.mi.core.TxThread.run(TxThread.java:72)
> >
> >Could someone help me out? Thanks in advance!!!
> >
> >Johnny
> >
> >
> >
> >
> >P.S. The following codes are for making .so file
> >
> >/* DO NOT EDIT THIS FILE - it is machine generated */
> >#include <jni.h>
> >/* Header for class SpawnerOutputStream */
> >
> >#ifndef _Included_SpawnerOutputStream
> >#define _Included_SpawnerOutputStream
> >#ifdef __cplusplus
> >extern "C" {
> >#endif
> >/*
> > * Class: SpawnerOutputStream
> > * Method: greeting
> > * Signature: ()V
> > */
> >JNIEXPORT void JNICALL Java_SpawnerOutputStream_greeting
> > (JNIEnv *, jclass);
> >
> >#ifdef __cplusplus
> >}
> >#endif
> >#endif
> >
> >
> >/**
> > * @version 1.10 1997-07-01
> > * @author Cay Horstmann
> > */
> >
> >#include "SpawnerOutputStream.h"
> >#include <stdio.h>
> >
> >JNIEXPORT void JNICALL Java_SpawnerOutputStream_greeting
> > (JNIEnv* env, jclass cl)
> >{ printf("Hello world!\n");
> >}
> >
> >_______________________________________________
> >cdt-debug-dev mailing list
> >cdt-debug-dev@xxxxxxxxxxx
> >http://dev.eclipse.org/mailman/listinfo/cdt-debug-dev
> >
> >
> >
> _______________________________________________
> cdt-debug-dev mailing list
> cdt-debug-dev@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/cdt-debug-dev