2010-12-01 2 views
2

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

+0

Можете ли вы показать строку, к которой относится ошибка? – bogertron 2010-12-01 19:20:03

ответ

0

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

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

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

+0

Я скомпилировал с `-I 'C: \ Program Files \ Java \ jdk1.6.0_21 \ include" `, чтобы получить jni.h, это должно работать правильно? – twolfe18 2010-12-01 17:07:53

Смежные вопросы