2013-02-21 80 views
1

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

我的第一个搜索指着我的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 

我使用了这个错误,发现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 
+0

而** do **你真的有'sys/times.h'在mingw32包含树的某处吗?如果是的话,那么这是gcc环境的问题。如果没有,那么这是安装mingw的问题。 – 2013-02-22 12:37:14

+0

这些文件存在于/usr/include/sys/times.h。你认为我现在可以做什么?任何帮助表示赞赏。 – Mahdi 2013-02-28 14:57:12

+0

显示'哪个gcc'和PATH变量的内容。将其添加到您的问题。 – 2013-02-28 15:05:16

回答

2

进一步谷歌搜索显示我的事实,确实SYS/times.h不是(显然不应该是)可在MinGW的。 sys/times.h下的include文件被认为是依赖于平台的,因此在windows上不支持。

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