在Windows 7中编译JNI

时间:2013-02-21 13:17:27

标签: gcc java-native-interface cygwin

我正在尝试在Windows 7下编译一个名为jbliss的开源项目作为DLL,以便我可以在Java中使用JNI。使用包中已经提供的makefile,在Linux中一切正常。

我的第一次搜索将我指向cygwin,然后我遵循了一些建议,例如this one,它基本上告诉我使用:

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

这主要给我带来以下错误:

bliss-0.50/timer.cc:2:23: sys/times.h: No such file or directory

我用Google搜索了这个错误,找到this post,建议使用-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

1 个答案:

答案 0 :(得分:2)

谷歌进一步向我展示了一个事实,即确实sys / times.h不是(并且显然不应该)在mingw上可用。据说sys / times.h下的include文件与平台有关,因此在Windows上不受支持。

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