Я хочу включить библиотеку C в свой проект Java через JNI. Я написал необходимый код 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 и изменить операторы включения, но я бы предпочел не делать этого.
Я пытался скомпилировать с использованием make и gcc на MinGW, но он всегда говорит, что не может скомпилировать с 64-битной целью.
Я пытался делать что-то через VC ++, используя тип проекта makefile, но я не мог понять, как это работает.
Есть предложения?
РЕДАКТИРОВАТЬ: я удалил .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