| Thread overview | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
June 16, 2006 JNI and the DMc compiler | ||||
|---|---|---|---|---|
| ||||
Hi, I am having trouble building a dll that java can use jni on, seems to build fine, but then just hangs and hangs and hangs... Here's the c: -- -- hello.c -- #include <jni.h> #include "HelloWorld.h" #include <stdio.h> JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) { printf("Hello world!\n"); return; } -- -- HelloWorld.h is a generated file (java gen's it) -- #include <jni.h> /* Header for class HelloWorld */ #ifndef _Included_HelloWorld #define _Included_HelloWorld #ifdef __cplusplus extern "C" { #endif /* * Class: HelloWorld * Method: displayHelloWorld * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif Here is the compile command that I gave dmc: dmc -I C:\jdk1.5.0_07\include;C:\jdk1.5.0_07\include\win32 -mn -WD hello.c kernel32.lib There are no errors displayed and a dll is created. However, when I try to do the java trick (which works with ms compiler created dll's), it hangs. Here's th e java stuff, in case you want to see :) --HelloWorld.java class HelloWorld { public native void displayHelloWorld(); static { System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().displayHelloWorld(); } } compile the java byte code: javac -classpath . HelloWorld.java generate the HelloWorld.h file: javah -jni -classpath . HelloWorld compile the dll: dmc -I C:\jdk1.5.0_07\include;C:\jdk1.5.0_07\include\win32 -mn -WD hello.c kernel32.lib execute the java app: java -classpath . HelloWorld Any help would be greatly appreciated. Thanks, Will | ||||
June 19, 2006 Re: JNI and the DMc compiler | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Will Senn | Wouldn't happen to be doing iostream calls, would you?
Will Senn wrote:
> Hi,
>
> I am having trouble building a dll that java can use jni on, seems to build fine, but then just hangs and hangs and hangs...
>
> Here's the c:
> --
> -- hello.c
> --
> #include <jni.h>
> #include "HelloWorld.h"
> #include <stdio.h>
>
> JNIEXPORT void JNICALL
> Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
> {
> printf("Hello world!\n");
> return;
> }
>
> --
> -- HelloWorld.h is a generated file (java gen's it)
> --
> #include <jni.h>
> /* Header for class HelloWorld */
>
> #ifndef _Included_HelloWorld
> #define _Included_HelloWorld
> #ifdef __cplusplus
> extern "C" {
> #endif
> /*
> * Class: HelloWorld
> * Method: displayHelloWorld
> * Signature: ()V
> */
> JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
> (JNIEnv *, jobject);
>
> #ifdef __cplusplus
> }
> #endif
> #endif
>
> Here is the compile command that I gave dmc:
> dmc -I C:\jdk1.5.0_07\include;C:\jdk1.5.0_07\include\win32 -mn -WD hello.c
> kernel32.lib
>
> There are no errors displayed and a dll is created. However, when I try to do the java trick (which works with ms compiler created dll's), it hangs. Here's th e java stuff, in case you want to see :)
>
> --HelloWorld.java
> class HelloWorld {
> public native void displayHelloWorld();
>
> static {
> System.loadLibrary("hello");
> }
>
> public static void main(String[] args) {
> new HelloWorld().displayHelloWorld();
> }
> }
>
> compile the java byte code: javac -classpath . HelloWorld.java
> generate the HelloWorld.h file: javah -jni -classpath . HelloWorld
> compile the dll: dmc -I C:\jdk1.5.0_07\include;C:\jdk1.5.0_07\include\win32 -mn
> -WD hello.c kernel32.lib
> execute the java app: java -classpath . HelloWorld
>
> Any help would be greatly appreciated.
>
> Thanks,
>
> Will
>
>
| |||
June 19, 2006 Re: JNI and the DMc compiler | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Scott Michel | printf("Hello world!\n");
return;
is the only code in the called dll.
In article <e76k2s$1hb7$1@digitaldaemon.com>, Scott Michel says...
>
>Wouldn't happen to be doing iostream calls, would you?
>
>Will Senn wrote:
>> Hi,
>>
>> I am having trouble building a dll that java can use jni on, seems to build fine, but then just hangs and hangs and hangs...
>>
>> Here's the c:
>> --
>> -- hello.c
>> --
>> #include <jni.h>
>> #include "HelloWorld.h"
>> #include <stdio.h>
>>
>> JNIEXPORT void JNICALL
>> Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
>> {
>> printf("Hello world!\n");
>> return;
>> }
>>
>> --
>> -- HelloWorld.h is a generated file (java gen's it)
>> --
>> #include <jni.h>
>> /* Header for class HelloWorld */
>>
>> #ifndef _Included_HelloWorld
>> #define _Included_HelloWorld
>> #ifdef __cplusplus
>> extern "C" {
>> #endif
>> /*
>> * Class: HelloWorld
>> * Method: displayHelloWorld
>> * Signature: ()V
>> */
>> JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
>> (JNIEnv *, jobject);
>>
>> #ifdef __cplusplus
>> }
>> #endif
>> #endif
>>
>> Here is the compile command that I gave dmc:
>> dmc -I C:\jdk1.5.0_07\include;C:\jdk1.5.0_07\include\win32 -mn -WD hello.c
>> kernel32.lib
>>
>> There are no errors displayed and a dll is created. However, when I try to do the java trick (which works with ms compiler created dll's), it hangs. Here's th e java stuff, in case you want to see :)
>>
>> --HelloWorld.java
>> class HelloWorld {
>> public native void displayHelloWorld();
>>
>> static {
>> System.loadLibrary("hello");
>> }
>>
>> public static void main(String[] args) {
>> new HelloWorld().displayHelloWorld();
>> }
>> }
>>
>> compile the java byte code: javac -classpath . HelloWorld.java
>> generate the HelloWorld.h file: javah -jni -classpath . HelloWorld
>> compile the dll: dmc -I C:\jdk1.5.0_07\include;C:\jdk1.5.0_07\include\win32 -mn
>> -WD hello.c kernel32.lib
>> execute the java app: java -classpath . HelloWorld
>>
>> Any help would be greatly appreciated.
>>
>> Thanks,
>>
>> Will
>>
>>
| |||
June 19, 2006 Re: JNI and the DMc compiler | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Will Senn | Attached some code I wrote some years ago to export the Window Address BooK (WAB) from Java via JNI.
Hope this helps.
Jan
--
ManiaC++
Jan Knepper
But as for me and my household, we shall use Mozilla... www.mozilla.org
| |||
June 20, 2006 Re: JNI and the DMc compiler | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Will Senn | Will Senn wrote:
> printf("Hello world!\n");
> return;
>
> is the only code in the called dll.
Ok, so you're only using stdio. Make sure you're using the DLL runtime and not the statically linked DMC runtime. Will require a recompile.
| |||
June 21, 2006 Re: JNI and the DMc compiler | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Scott Michel | Scott Michel wrote:
> Will Senn wrote:
>> printf("Hello world!\n");
>> return;
>>
>> is the only code in the called dll.
>
> Ok, so you're only using stdio. Make sure you're using the DLL runtime and not the statically linked DMC runtime. Will require a recompile.
Scott,
What do you mean by "DLL runtime and not he statically linked DMC runtime"? or rather, how do I ensure that this is the case - is it a paramter to the compiler or what?
Thanks,
Will
| |||
June 22, 2006 Re: JNI and the DMc compiler | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Will Senn | Will Senn wrote: > What do you mean by "DLL runtime and not he statically linked DMC runtime"? or rather, how do I ensure that this is the case - is it a paramter to the compiler or what? "-ND" to the compiler. That causes the compiler to insert a library record into the object file that picks up the DLL version of the compiler runtime. http://www.digitalmars.com/ctg/ctg.html will always be your friend. | |||
June 22, 2006 Re: JNI and the DMc compiler | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Scott Michel | Scott Michel wrote:
> Will Senn wrote:
>> What do you mean by "DLL runtime and not he statically linked DMC runtime"? or rather, how do I ensure that this is the case - is it a paramter to the compiler or what?
>
> "-ND" to the compiler. That causes the compiler to insert a library record into the object file that picks up the DLL version of the compiler runtime.
>
> http://www.digitalmars.com/ctg/ctg.html will always be your friend.
Hmmm... Seems like this option needs SND.lib, which is purportedly only available on the CD, which costs 40+ bucks.
I verified that this works in MS. I downloaded VC++ 2005 Express Edition and built the dll using:
cl -IC:\jdk1.5.0_07\include -IC:\jdk1.5.0_07\include\win32 -LD hello.c -Fehello.dll
the dll that resulted worked flawlessly with jni...
I would prefer to use Digital Mars, but I'm not excited about paying for a CD just to 'see' if my program will compile and run.
Is there not a way to build this incredibly simplistic example of a dll using the downloadable version of dmc?
The cl options are:
-I include dir
-LD create dll
-Fe name output executable
That's it, no bizarre options, just build a dll and name it hello.dll.
Thanks,
Will
| |||
July 12, 2006 Re: JNI and the DMc compiler | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Will Senn | Will Senn wrote: > Hmmm... Seems like this option needs SND.lib, which is purportedly only available on the CD, which costs 40+ bucks. <sarcasm>And this is some incredible hardship?</sarcasm> > I verified that this works in MS. I downloaded VC++ 2005 Express Edition and built the dll using: > > cl -IC:\jdk1.5.0_07\include -IC:\jdk1.5.0_07\include\win32 -LD hello.c -Fehello.dll > > the dll that resulted worked flawlessly with jni... > > I would prefer to use Digital Mars, but I'm not excited about paying for a CD just to 'see' if my program will compile and run. Sounds like you use DM for a lot more than just this project. In the past, '-ND' was the way I went about making JNI work. Static libraries don't work well, esp. stdio or iostreams are involved. | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply