2016-05-19 3 views
2

Я установил MinGw в Windows 10 и выполнил некоторые онлайн-инструкции для создания проекта JNI. Хотя, я следовал инструкциям дословно, gcc не может найти файл jni.h. Однако этот файл находится в каталоге/include моего JAVA_HOME. Вот команды я Выпущено:Как% переменная среды JAVA_HOME% в оболочке MinGw

[email protected]/c/Users/sansari/Documents/source/java 
$ set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_91 

[email protected]/c/Users/sansari/Documents/source/java 
$ echo %JAVA_HOME% 
%JAVA_HOME% 

[email protected]/c/Users/sansari/Documents/source/java 
$ gcc -Wl, --add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o hello.dll HelloJNI.c 
gcc.exe: error: unrecognized command line option '--add-stdcall-alias' 

[email protected]/c/Users/sansari/Documents/source/java 
$ gcc -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o hello.dll HelloJNI.c 
HelloJNI.c:1:17: fatal error: jni.h: No such file or directory 
#include <jni.h> 
       ^
compilation terminated. 

[email protected]/c/Users/sansari/Documents/source/java 

Я пытаюсь убедиться, что я знаю структуру файла, который должен быть на месте для проекта JNI, а также закапывают немного больше о том, чтобы обменять различные структуры из JAVA-классы для собственного кода и наоборот.

Я также попытался это так:

$ gcc -Wl,--add-stdcall-alias -I"\include" -I"\include\win32" -shared -o hello.dll HelloJNI.c 
HelloJNI.c:1:17: fatal error: jni.h: No such file or directory 
#include <jni.h> 
       ^
compilation terminate. 

@Chrono Kitsune- Спасибо; Вот результат:

[email protected]/c/Users/sansari/Documents/source/java 
$ export JAVA_HOME="C:\Program Files\Java\jdk1.8.0_91" 

[email protected]/c/Users/sansari/Documents/source/java 
$ gcc -Wl,--add-stdcall-alias -I"\include" -I"\include\win32" -shared -o hello.dll HelloJNI.c 
HelloJNI.c:1:17: fatal error: jni.h: No such file or directory 
#include <jni.h> 
       ^
compilation terminated. 

Странно, что я также установил путь к каталогу java и перезагрузил машину. Когда я выдаю java, оболочка находит исполняемый файл.

Environment Variables Я добавил JAVA_HOME к моим переменным и к переменной пути. Я все еще получаю то же сообщение. Я также перезагрузил машину.

[email protected]/c/users/sansari/Documents/source/java 
$ gcc -Wl,--add-stdcall-alias -I"\include" -I"\include\win32" -shared -o hello.dll HelloJNI.c 
HelloJNI.c:1:17: fatal error: jni.h: No such file or directory 
#include <jni.h> 
       ^
compilation terminated. 

[email protected]/c/users/sansari/Documents/source/java 
$ gcc -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o hello.dll HelloJNI.c 
HelloJNI.c:1:17: fatal error: jni.h: No such file or directory 
#include <jni.h> 
       ^
compilation terminated. 

Это сработало!

[email protected]/c/users/sansari/Documents/source/java 
$ gcc -Wl,--add-stdcall-alias -I"$JAVA_HOME\include" -I"$JAVA_HOME\include\win32" -shared -o hello.dll HelloJNI.c 

[email protected]/c/users/sansari/Documents/source/java 
$ ls 
HelloJNI.c HelloJNI.class HelloJNI.h HelloJNI.java hello.dll 
+0

Это больше похоже на тему для [SuperUser] (http://superuser.com/). – Turing85

+0

В оболочке MinGW используется другой синтаксис для переменных.Например, 'echo% PATH%' не работает так, как предполагалось. Однако 'echo $ PATH' делает. Вам нужно будет использовать синтаксис оболочки POSIX 'export VAR =" value "' вместо синтаксиса Windows/DOS 'set VAR =" value "'. –

+0

@ Turing85- Я был бы рад переместить его, но это вопрос о конфигурации компилятора и о том, как создать проект java. Я чувствую, что это законно. Какой программист не столкнулся с проблемой отсутствия видимых файлов? – user3326293

ответ

1

В оболочке MinGW используется другой синтаксис для переменных - синтаксис, заданный для оболочки POSIX. Например, echo %PATH% не работает, как в командной оболочке Windows/DOS. Однако echo $PATH делает.

Вам необходимо использовать синтаксис оболочки POSIX export VAR="value" вместо синтаксиса Windows/DOS set VAR="value".

Альтернатива избежать этого шага в будущих сессиях является add a new Windows user environment variable:

  1. Типа Окно + R.
  2. Тип control sysdm.cpl,3 Открыть «Расширенные настройки системы».
  3. Нажмите Environment Variables кнопка.
  4. Нажмите кнопку New в верхней части (это называется «переменные пользователя для < пользователя >» на английском высвобождает.)
  5. Добавить свой JAVA_HOME переменной и ее значение.
  6. Нажмите OK во всех диалоговых окнах, чтобы сохранить изменения.
  7. Откройте новую оболочку MinGW и проверьте с помощью echo $JAVA_HOME.
  8. Возможно, вам придется закрыть все оболочки MinGW или даже выйти из системы и войти в систему для внесения изменений.
Смежные вопросы