【发布时间】:2010-12-01 16:34:09
【问题描述】:
我想通过 JNI 在我的 Java 项目中包含一个 C 库。我编写了必要的 JNI 包装器代码,并在 Linux 环境中使用 gcc 和 make 对其进行了编译和测试。现在我需要编译它来制作一个 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 文件并更改包含语句,但我不希望这样做。
我曾尝试在 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
【问题讨论】:
-
你能显示错误所指的行吗?
标签: c visual-c++ dll 64-bit java-native-interface