Я хочу включить библиотеку C в свой Java-проект через JNI. Я написал необходимый код оболочки JNI, и я скомпилировал и протестировал его в среде Linux, используя gcc и make. Теперь мне нужно скомпилировать это, чтобы создать 64-битную Windows-библиотеку, и я не могу ее скомпилировать.Компиляция 64-битной DLL для JNI
Я загрузил 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, но я бы предпочел не делать этого.
Я попытался скомпилировать с помощью make и gcc на MinGW, но он всегда говорит, что он не может скомпилировать 64-битную цель.
Я пробовал делать что-то через VC++, используя тип проекта makefile, но я не мог понять, как это работает.
Любые предложения?
EDIT: Я удалил файлы .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
Можете ли вы показать строку, к которой относится ошибка? – bogertron 2010-12-01 19:20:03