Gcc 在Windows7中为JNI编译

Gcc 在Windows7中为JNI编译,gcc,java-native-interface,cygwin,Gcc,Java Native Interface,Cygwin,我正试图在Windows7下编译一个名为DLL的开源项目,以便在Java中与JNI一起使用。使用包中已经提供的makefile,Linux中的一切都可以正常工作 我的第一次搜索指向cygwin,然后我遵循了几个建议,比如,基本上告诉我使用: gcc-3 -D __int64="long long" -mno-cygwin -Wl,--add-stdcall-alias -I"<JAVA_HOME>\include" -I"<JAVA_HOME>\include\wi

我正试图在Windows7下编译一个名为DLL的开源项目,以便在Java中与JNI一起使用。使用包中已经提供的makefile,Linux中的一切都可以正常工作

我的第一次搜索指向cygwin,然后我遵循了几个建议,比如,基本上告诉我使用:

gcc-3 -D __int64="long long" -mno-cygwin -Wl,--add-stdcall-alias 
  -I"<JAVA_HOME>\include" -I"<JAVA_HOME>\include\win32" -shared -o jbliss.dll *.cc
我在谷歌上搜索了这个错误,发现了,建议使用
-I/usr/include/
。但这将导致比解决问题更多的错误:

In file included from /usr/lib/gcc/i686-pc-mingw32/3.4.4/include/c++/bits/stl_algobase.h:67,
                 from /usr/lib/gcc/i686-pc-mingw32/3.4.4/include/c++/bits/stl_tree.h:66,
                 from /usr/lib/gcc/i686-pc-mingw32/3.4.4/include/c++/set:66,
                 from bliss-0.50/graph.cc:4:
/usr/lib/gcc/i686-pc-mingw32/3.4.4/include/c++/cstdlib:181: error: `::strtold' has not been declared
/usr/lib/gcc/i686-pc-mingw32/3.4.4/include/c++/cstdlib:200: error: `__gnu_cxx::strtold' has not been declared
因此,我现在坐在那里困惑不解,希望得到一个答案,即使用gcc的哪些选项来实现它。 我刚刚下载了cygwin,我想说我有最新的版本

提前谢谢


额外本地信息:

$ which gcc
/usr/bin/gcc

$ echo $PATH
/usr/local/bin:/usr/bin:/cygdrive/c/WATCOM/BINNT:/cygdrive/c/WATCOM/BINW:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0:/cygdrive/c/Program Files (x86)/QuickTime Alternative/QTSystem:/cygdrive/c/Program Files/TortoiseSVN/bin:/cygdrive/c/Program Files/MATLAB/R2011b/runtime/win64:/cygdrive/c/Program Files/MATLAB/R2011b/bin:/cygdrive/c/Program Files (x86)/OpenSSH/bin:/cygdrive/c/Program Files/MiKTeX 2.9/miktex/bin/x64:/cygdrive/c/Program Files (x86)/Graphviz 2.28/bin

谷歌搜索进一步向我展示了一个事实,即sys/times.h在mingw上确实不可用(而且显然不应该)。sys/times.h下的include文件称为平台相关文件,因此windows不支持


解决方案是尽可能删除对sys/times.h(或任何依赖于平台的库)的任何调用。删除这些include文件(当然,还要向编译器添加适当的选项)会导致成功的构建。

那么,在mingw32 include树中是否确实有
sys/times.h
?如果是,那就是gcc环境的问题。如果不是,则是mingw安装的问题。文件位于/usr/include/sys/times.h。你认为我现在能做什么?非常感谢您的帮助。显示
哪个gcc
以及PATH变量的内容。将它添加到您的问题中。添加到问题中。/usr/include中的头与gcc正在考虑的其他事项之间似乎存在一些不兼容,因为添加编译器选项
-I/usr/include
即使在编译器执行任何其他操作之前,我也会得到以下基本错误:错误:`::strtold'尚未声明
$ which gcc
/usr/bin/gcc

$ echo $PATH
/usr/local/bin:/usr/bin:/cygdrive/c/WATCOM/BINNT:/cygdrive/c/WATCOM/BINW:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0:/cygdrive/c/Program Files (x86)/QuickTime Alternative/QTSystem:/cygdrive/c/Program Files/TortoiseSVN/bin:/cygdrive/c/Program Files/MATLAB/R2011b/runtime/win64:/cygdrive/c/Program Files/MATLAB/R2011b/bin:/cygdrive/c/Program Files (x86)/OpenSSH/bin:/cygdrive/c/Program Files/MiKTeX 2.9/miktex/bin/x64:/cygdrive/c/Program Files (x86)/Graphviz 2.28/bin