Компиляция 64-битной DLL для JNI - PullRequest
2 голосов
/ 01 декабря 2010

Я хочу включить библиотеку 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

1 Ответ

0 голосов
/ 01 декабря 2010

Вы на самом деле не хотите компилировать файлы заголовков, скорее вы хотите включить их в путь компиляции при компиляции файлов c / c ++.

Что касается проблемы с заданием, вам нужно включить заголовочные файлы jni, которые находятся в каталоге% JAVA_HOME% \ include.

Для Visual C ++ Express, вы загрузили 64-битные инструменты сборки? И когда вы утверждаете, что gcc и MinGW не могут скомпилироваться с 64-битной целью, какое сообщение вы получите в точности? У вас есть minGW-w64?

...