JNI Netbeans and Cygwin Compile problem

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • myusernotyours
    New Member
    • Nov 2007
    • 188

    JNI Netbeans and Cygwin Compile problem

    Hi All,

    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

    Code:
     
    public class OslibClass {
        static{
            System.loadLibrary("libOsibClass");
        }
        
        public void OslibClass(){
            
        }
        private static native long getWindowHandle();
    
    }
    Native code...

    Code:
     
    #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;
    }
    Netbeans Output...
    Code:
    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.
    Last edited by Nepomuk; Sep 17 '08, 10:25 AM. Reason: Put the Netbeans Output in [CODE] tags, so that it's easier to read
  • myusernotyours
    New Member
    • Nov 2007
    • 188

    #2
    Hi,
    Seems I figured it out somehow.
    In netbeans I was pointing the include path for the JNI headers to where my JDK windows installer had installed them. i.e ..Program files\\java.... . I found out though that cygwin comes with it's own java compiler (or is it just headers??) and netbeans knows where to find them. So I removed my include from the nebeans settings and voila!!

    Din't get to figure out what was really happening. Perherps someone can tell us.
    Now, I kind of want to build a native library (.so) but when I trie it, the linker doesn't seem to find some references. Example I keep getting..

    undefined reference to `_dlopen'
    undefined reference to `___getreent'
    undefined reference to `_dlerror'
    undefined reference to `___getreent'
    In function `getAwtLockFunc tions':

    and so on for very many functions.

    Even if I put the directory with these .a files explicitly in the link properties in netbeans, I still get the same errors.

    Regards,

    Alex.




    Regards,

    Alex.

    Comment

    • cadii
      New Member
      • Jun 2009
      • 1

      #3
      Hi,
      I'm having the same undefined reference problem. How did you solve it ?

      Any help highly appreciated

      Comment

      Working...