Am working on a Java application in which I have to use the JNI to Interface with some native code for both windows and unix. Am using netbeans IDE with the C/C++ pack installed. Am also using Cygwin as my compiler (gcc), this is ostensibly because I hope this compiler will also compile the unix native libraries since I don't have a Linux installation. (I am working on a personal project from the office and can't get linux installed).
First question will it be possible to get native linux libs from Cygwin?
I tried doing a small test using the windows function FindWindow() and I am not able to build it. gcc complains about the jlong type defined by the JNI headers.
Here is the code followed by the netbeans output.
Help is greatly appreciated.
The Java class
Expand|Select|Wrap|Line Numbers
- public class OslibClass {
- static{
- System.loadLibrary("libOsibClass");
- }
- public void OslibClass(){
- }
- private static native long getWindowHandle();
- }
Expand|Select|Wrap|Line Numbers
- #include <OslibClass.h>
- #include <windows.h>
- JNIEXPORT jlong JNICALL Java_org_OslibClass_getWindowHandle
- (JNIEnv *, jclass){
- jlong handle;
- HWND hwnd = FindWindow("SunAwtFrame","GetHandle - NetBeans IDE 6.1");
- handle = hwnd;
- return handle;
- }
Expand|Select|Wrap|Line Numbers
- Running "rm -rf build/Debug/Cygwin-Windows/src/OslibClass.o" in C:\Documents and Settings\Administrator\My Documents\NetBeansProjects\GetHandle
- Clean successful. Exit value 0.
- Running "C:\cygwin\bin\make.exe -f nbproject/Makefile-Debug.mk build/Debug/Cygwin-Windows/src/OslibClass.o" in C:\Documents and Settings\Administrator\My Documents\NetBeansProjects\GetHandle
- mkdir -p build/Debug/Cygwin-Windows/src
- gcc.exe -c -g -IC\:/Program\ Files/Java/jdk1.6.0_07/include/win32 -IC\:/Program\ Files/Java/jdk1.6.0_07/include -I. -fPIC -o build/Debug/Cygwin-Windows/src/OslibClass.o src/OslibClass.c
- src/OslibClass.c:1: warning: -fPIC ignored for target (all code is position independent)
- In file included from C:/Program Files/Java/jdk1.6.0_07/include/jni.h:27,
- from ./OslibClass.h:2,
- from src/OslibClass.c:1:
- C:/Program Files/Java/jdk1.6.0_07/include/win32/jni_md.h:16: error: parse error before "jlong"
- C:/Program Files/Java/jdk1.6.0_07/include/win32/jni_md.h:16: warning: data definition has no type or storage class
- In file included from ./OslibClass.h:2,
- from src/OslibClass.c:1:
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:108: error: parse error before "jlong"
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:108: warning: no semicolon at end of struct or union
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:112: error: parse error before '}' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:112: warning: data definition has no type or storage class
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:264: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:279: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:286: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:293: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:300: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:307: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:314: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:316: warning: no semicolon at end of struct or union
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:318: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:319: error: `jlong' declared as function returning a function
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:319: error: 'jlong' redeclared as different kind of symbol
- C:/Program Files/Java/jdk1.6.0_07/include/win32/jni_md.h:16: error: previous declaration of 'jlong' was here
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:319: warning: data definition has no type or storage class
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:320: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:321: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:321: error: `jlong' declared as function returning a function
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:321: warning: data definition has no type or storage class
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:328: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:335: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:342: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:351: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:360: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:369: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:378: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:387: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:396: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:398: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:399: error: `jlong' declared as function returning a function
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:399: warning: data definition has no type or storage class
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:400: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:402: error: `jlong' declared as function returning a function
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:402: warning: data definition has no type or storage class
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:403: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:405: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:405: error: `jlong' declared as function returning a function
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:405: warning: data definition has no type or storage class
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:414: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:423: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:432: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:449: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:450: error: `jlong' declared as function returning a function
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:450: warning: data definition has no type or storage class
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:469: error: parse error before "jlong"
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:483: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:490: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:497: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:504: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:511: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:518: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:520: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:521: error: `jlong' declared as function returning a function
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:521: warning: data definition has no type or storage class
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:522: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:523: error: `jlong' declared as function returning a function
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:523: warning: data definition has no type or storage class
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:524: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:525: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:525: error: `jlong' declared as function returning a function
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:525: warning: data definition has no type or storage class
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:532: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:539: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:546: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:562: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:563: error: `jlong' declared as function returning a function
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:563: warning: data definition has no type or storage class
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:582: error: parse error before "jlong"
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:644: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:645: warning: data definition has no type or storage class
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:662: error: parse error before "jlong"
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:679: error: parse error before "jlong"
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:696: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:740: error: parse error before "jlong"
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:743: error: parse error before '*' token
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:744: error: `jlong' declared as function returning a function
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:744: warning: data definition has no type or storage class
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:750: error: parse error before '}' token
- In file included from src/OslibClass.c:1:
- ./OslibClass.h:15: warning: `__stdcall__' attribute only applies to function types
- ./OslibClass.h:15: error: 'jlong' redeclared as different kind of symbol
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:744: error: previous declaration of 'jlong' was here
- ./OslibClass.h:15: error: 'jlong' redeclared as different kind of symbol
- C:/Program Files/Java/jdk1.6.0_07/include/jni.h:744: error: previous declaration of 'jlong' was here
- ./OslibClass.h:15: error: parse error before "Java_org_OslibClass_getWindowHandle"
- src/OslibClass.c:5: warning: `__stdcall__' attribute only applies to function types
- src/OslibClass.c:5: error: parse error before "Java_org_OslibClass_getWindowHandle"
- src/OslibClass.c:8: error: initializer element is not constant
- src/OslibClass.c:9: warning: initialization makes integer from pointer without a cast
- src/OslibClass.c:9: error: initializer element is not constant
- src/OslibClass.c:9: warning: data definition has no type or storage class
- src/OslibClass.c:10: error: parse error before "return"
- make: *** [build/Debug/Cygwin-Windows/src/OslibClass.o] Error 1
- Build failed. Exit value 2.