2014-11-17 3 views
0

Я после этого Netbeans tutorial for JNI, но когда я построю свою JNIDemo.c библиотеки я получаю эту ошибку на выходе Netbeans:Ошибки следующих Netbeans основного учебника JNI

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .clean-conf 
    make[1]: Entering directory `/home/username/Documents/JavaProjects/JNIDemoCd1' 
    rm -f -r build/Debug 
    rm -f dist/libJNIDemoCdl.so 
    make[1]: Leaving directory `/home/username/Documents/JavaProjects/JNIDemoCd1' 

    CLEAN SUCCESSFUL (total time: 54ms) 
    "/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf 
    make[1]: Entering directory `/home/username/Documents/JavaProjects/JNIDemoCd1' 
    "/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/libJNIDemoCdl.so 
    make[2]: Entering directory `/home/username/Documents/JavaProjects/JNIDemoCd1' 
    mkdir -p build/Debug/GNU-Linux-x86 
    rm -f "build/Debug/GNU-Linux-x86/JNIDemo.o.d" 
    gcc -shared -m32 -c -g -I/opt/jdk1.7.0_67/include -I/opt/jdk1.7.0_67/include/linux -include /opt/jdk1.7.0_67/include -include /opt/jdk1.7.0_67/include/linux -fPIC -MMD -MP -MF "build/Debug/GNU-Linux-x86/JNIDemo.o.d" -o build/Debug/GNU-Linux-x86/JNIDemo.o JNIDemo.c 
    In file included from <command-line>:0:0: 
    /usr/include/stdc-predef.h:59:1: fatal error: /opt/jdk1.7.0_67/include: No such file or directory 
    #endif 
    ^
    compilation terminated. 
    make[2]: *** [build/Debug/GNU-Linux-x86/JNIDemo.o] Error 1 
    make[2]: Leaving directory `/home/username/Documents/JavaProjects/JNIDemoCd1' 
    make[1]: *** [.build-conf] Error 2 
    make[1]: Leaving directory `/home/username/Documents/JavaProjects/JNIDemoCd1' 
    make: *** [.build-impl] Error 2 

    BUILD FAILED (exit value 2, total time: 119ms) 

Спасибо, ребята!

+0

Где вы установили jdk1.7_0_67? – CharlieS

+0

Как я могу это знать? Я имею в виду, по мне, он находится в/opt/jdk ... – onlycparra

+0

в соответствии с опубликованной вами статьей, это/home/ubuntu. почему вы изменили это, если не знаете, где это? В статье четко объясняются предпосылки. – CharlieS

ответ

0

Решенный!
Это была проблема с архитектурой.

Я скомпилировал библиотеку с параметром -m32 в свойствах проекта C, как говорится в учебнике, но моя виртуальная машина - это 64-битная машина, поэтому я должен использовать -m64.

Что он подразумевает? когда кто-то работает с JNI, необходимо сопоставить архитектуру нашей виртуальной машины с архитектурой библиотеки.

Как проверить архитектуру нашей библиотеки? В терминале linux введите:
objdump -f my_lib.so | grep ^architecture.

С, что вы можете получить что-то вроде этого (x32): architecture: i386, flags 0x00000150:
Или как это (x64): architecture: i386:x86-64, flags 0x00000150:

Итак, я ставлю -m64 вместо -m32 в свойствах и «! Вуаля», В.М. 64 бита и библиотека 64 бит работают вместе. Спасибо всем.

Смежные вопросы