为JNI编译64位DLL

时间:2010-12-01 16:34:10

标签: c visual-c++ dll 64-bit java-native-interface

我想通过JNI在我的Java项目中包含一个C库。我编写了必要的JNI包装器代码,并使用gcc和make在Linux环境中编译和测试了它。现在我需要编译它来制作64位Windows DLL,我无法编译它。

我下载了Visual C ++ Express 2010,并且我一直在命令行上使用cl.exe。在没有知道任何更好的方法的情况下,我刚刚调用cl.exe,其中包含我想要编译为参数的所有文件。我遇到了各种各样的错误:

Command line warning D9024: unrecognized source file type 'svm_jni.h'...

svm_jni.c(63) : error C2275: 'jobject' : illegal use of this type as an expression...

我发现的第一个问题是cl.exe不接受.h文件这一事实(我猜它只适用于C ++而不是C?)。这有解决方法吗?我可以将所有.h文件更改为.c文件并更改include语句,但我不想这样做。

我尝试在MinGW上使用make和gcc进行编译,但它总是说它无法编译为64位目标。

我尝试使用makefile项目类型通过VC ++做事,但我无法弄清楚它是如何工作的。

有什么建议吗?

编辑:我从命令行参数中删除了.h文件,这解决了部分问题。我一直在使用

-I "C:\Program Files\Java\jdk1.6.0_21\include" -I "C:\Program Files\Java\jdk1.6.0_21\include\win32"

获取jni.h和jni_md.h。我还是得到了

svm_jni.c(63) : error C2275: 'jobject' : illegal use of this type as an expression
    C:\Program Files\Java\jdk1.6.0_21\include\jni.h(83) : see declaration of 'jobject'

之后的一堆语法和奇怪的错误。我假设所有错误都是常见问题的结果,但我不知道哪里出错了。

是否有64位版本的jni_md.h?我现在使用的是在\ include \ win32

1 个答案:

答案 0 :(得分:0)

您真的不想编译头文件,而是希望在编译c / c ++文件时将它们包含在编译路径中。

对于jobject问题,您需要包含位于%JAVA_HOME%\ include目录下的jni头文件。

对于Visual C ++ Express,您是否下载了64位构建工具?当你声明gcc和MinGW无法编译成64位目标时,你得到了什么信息?你有minGW-w64吗?