Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 遵循JNI的Netbeans基础教程时出错_Java_C_Netbeans_Java Native Interface - Fatal编程技术网

Java 遵循JNI的Netbeans基础教程时出错

Java 遵循JNI的Netbeans基础教程时出错,java,c,netbeans,java-native-interface,Java,C,Netbeans,Java Native Interface,我遵循这一点,但是当我构建JNIDemo.c库时,我在Netbeans输出中得到了以下错误: "/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 di

我遵循这一点,但是当我构建
JNIDemo.c
库时,我在Netbeans输出中得到了以下错误:

    "/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)
“/usr/bin/make”-f nbproject/Makefile-Debug.mk QMAKE=子项目=.clean conf
make[1]:输入目录“/home/username/Documents/JavaProjects/JNIDemoCd1”
rm-f-r构建/调试
rm-f dist/libJNIDemoCdl.so
make[1]:离开目录“/home/username/Documents/JavaProjects/JNIDemoCd1”
清洗成功(总时间:54ms)
“/usr/bin/make”-f nbproject/Makefile-Debug.mk QMAKE=子项目=.build conf
make[1]:输入目录“/home/username/Documents/JavaProjects/JNIDemoCd1”
“/usr/bin/make”-f nbproject/Makefile-Debug.mk dist/libJNIDemoCdl.so
make[2]:输入目录“/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.067/include-I/opt/jdk1.7.067/include/linux-include/opt/jdk1.7.067/include-include/opt/jdk1.7.067/include/linux-fPIC-MMD-MP-MF“build/Debug/GNU-linux-x86/JNIDemo.o.d”-build/Debug/GNU-linux-x86/JNIDemo.o JNIDemo.c
包含在文件中的时间:0:0:
/usr/include/stdc predef.h:59:1:致命错误:/opt/jdk1.7.0_67/include:没有这样的文件或目录
#恩迪夫
^
编译终止。
make[2]:***[build/Debug/GNU-Linux-x86/JNIDemo.o]错误1
make[2]:离开目录“/home/username/Documents/JavaProjects/JNIDemoCd1”
生成[1]:***[.build conf]错误2
make[1]:离开目录“/home/username/Documents/JavaProjects/JNIDemoCd1”
make:**[.build impl]错误2
生成失败(退出值2,总时间:119ms)
谢谢大家

解决了
这是架构的问题

正如教程所说,我在C项目属性中使用选项
-m32
编译了这个库,但是我的虚拟机是一个64位的机器,所以我必须使用
-m64

这意味着什么?当有人使用JNI时,有必要将VM的体系结构与库的体系结构相匹配。

如何检查我们图书馆的架构? 在linux终端中,键入:
objdump-f my_lib.so | grep^architecture

有了它,您可以得到类似的东西(x32):
架构:i386,标志0x00000150:

或者像这样(x64):
体系结构:i386:x86-64,标志0x00000150:


因此,我将
-m64
而不是
-m32
放在属性和“等等!”中,VM 64位和库64位一起工作。感谢大家。

您在哪里安装了jdk1.7_0_67?我怎么知道?我的意思是,根据我的说法,它在/opt/jdk中……根据你发表的文章,它是/home/ubuntu。如果你不知道它在哪里,为什么要改变它?这篇文章清楚地解释了先决条件。我没有改变它,我在开始教程之前安装了java,在我的主目录中没有任何用户“ubuntu”。另一方面,事实上,我确实有一个文件夹“/opt/jdk1.7.0_67/include”包含所有文件。gcc
-include
选项命名一个文件,而不是目录。那是从哪里来的?