我已经彻底搜索了整个网络近两天,并且无法找到问题的解决方案。我希望你们能帮助我。 这可能有点具体,但我相信其他人迟早会遇到同样的问题。
我目前在Windows 10,64位系统上使用NetBeans Dev(Build 201803200002)和Java JDK 9.0.4。
我正在研究这个JNI教程: https://cnd.netbeans.org/docs/jni/beginning-jni-win.html
几乎在最后,在图13下面,你应该构建项目HelloWorldNative(在我的例子中,它被称为JNITestNative)。
但我总是收到以下错误消息:
cd 'D:\NetBeans\projects\JNITestNative'
C:\Programme\cygwin\bin\make.exe -f Makefile CONF=Debug
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory '/cygdrive/d/NetBeans/projects/JNITestNative'
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/JNITestNative.dll
make[2]: Entering directory '/cygdrive/d/NetBeans/projects/JNITestNative'
mkdir -p build/Debug/Cygwin-Windows
rm -f "build/Debug/Cygwin-Windows/JNITest.o.d"
gcc -mno-cygwin -Wl,--add-stdcall-alias shared -m32 -c -g -I/cygdrive/C/Program\ Files/Java/jdk-9.0.4/include -I/cygdrive/C/Program\ Files/Java/jdk-9.0.4/include/win32 -MMD -MP -MF "build/Debug/Cygwin-Windows/JNITest.o.d" -o build/Debug/Cygwin-Windows/JNITest.o JNITest.c
gcc: error: shared: No such file or directory
gcc: error: unrecognized command line option '-mno-cygwin'; did you mean '-mno-clwb'?
nbproject/Makefile-Debug.mk:66: recipe for target 'build/Debug/Cygwin-Windows/JNITest.o' failed
make[2]: *** [build/Debug/Cygwin-Windows/JNITest.o] Error 1
make[2]: Leaving directory '/cygdrive/d/NetBeans/projects/JNITestNative'
nbproject/Makefile-Debug.mk:59: recipe for target '.build-conf' failed
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory '/cygdrive/d/NetBeans/projects/JNITestNative'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
make: *** [.build-impl] Error 2
BUILD FAILED (exit value 2, total time: 1s)
NetBeans似乎缺少一个我希望它首先生成的文件 - JNITest.o
我检查了目录... jdk-9.0.4 / include,... jdk9.0.4 / include / win32和... Debug / Cygwin-Windows。 所有这些都存在,但文件JNITest.o.d或JNITest.o不存在。
我试图取代" cygwin" by" clwb"正如第二条错误消息中所建议的那样,但第一个错误仍然存在。
根据互联网上的一些消息来源,我也删除了整个部分" -mno-cygwin"来自其他选项,但仍然会出现第一个错误。
根据互联网上的其他一些消息来源,我将我的... cygwin / bin目录添加到包含目录中,但这并未改善任何内容。
我完全不知道如何解决这个问题或者如何寻找其他潜在的解决方案。
我希望这里的任何人都可以提供帮助。
答案 0 :(得分:0)
Jorn Vernee在评论中说出了正确的答案。 在“共享”参数之前缺少' - '。 谢谢你。
对于其他可能遇到此问题的人,让我总结一下我从这里到成功构建的方式。
根据this和this我添加了三个代码行来定义数据类型__int64,所以现在我的JNITest.c看起来像这样:
#ifdef __CYGWIN__
#define __int64 long long
#endif
#include <jni.h>
#include <stdio.h>
#include "JNITest.h"
JNIEXPORT void JNICALL Java_com_plaettner_jnitest_JNITest_nativePrint
(JNIEnv *env, jobject obj)
{
printf("\nHello World from C\n");
}
接下来,我向我的Cygwin添加了“mingw64-i686-gcc-core:GCC for Win32”和“mingw64-i686-gcc-g ++:GCC for Win32”。
在NetBeans选项 - C / C ++ - 构建工具中,我将C和C ++编译器分别从gcc / g ++更改为i686-w64-mingw32-gcc / g ++。
在类别Build - C Compiler / C ++ Compiler中的项目属性中,我将附加选项从“-mno-cygwin -Wl, - add-stdcall-alias -shared -m32”更改为“-Wl, - add-stdcall-alias -shared“并将我的... cygwin / bin目录添加到include目录中。
这导致已经成功构建。无论如何,我再次将“-m32”添加到其他选项,并将c / c ++编译器更改回gcc / g ++以保持对教程的符合性。 现在这也导致了成功的构建,尽管之前没有。
从include目录中删除... cygwin / bin目录会导致构建失败,并且必须重复整个过程。 至少对我来说这是有用的。