Я пытаюсь использовать JNI для интеграции кода .C с моим проектом Java.
При попытке сгенерировать файл .dll с помощью vcvars32.bat в Visual Studio 2017 он дает мне сообщение об ошибке:
«C: \ Program Files \ Java \ jdk1.8.0_151 \ include \ jni.h (39): фатальная ошибка C1083: не удается открыть включаемый файл: 'stdio.h': нет такого файла или каталога»
Я удалил включение библиотеки stdio.h в свой код на C, но это не помогло.
Моя команда:
"cl -I" C: \ Program Files \ Java \ jdk1.8.0_151 \ include "-I" C: \ Program Files \ Java \ jdk1.8.0_151 \ include \ win32 "-LD" Factorial.c "-Fe" Factorial.dll ""
Я пробовал vcvars64.bat, vcvarsall.bat и даже VsDevCmd.bat, но, к сожалению, это тоже не помогло
Хорошо, давайте сделаем простой файл nmake и проверим:
создайте файл типа link: compile ln /DLL /LTCG /LIBPATH:"C:\Program Files\Java\jdk1.8.0_151\lib" OUT:factorial.dll msvcrt.lib kernel32.lib jvm.lib Factorial.obj compile: cl /c /nologo /GL /Zl Factorial.c /FoFactorial.obj и используйте nmake для его сборки. Инструкции Nmake docs.microsoft.com/en-us/cpp/build/nmake-referenceengr.iupui.edu/~dskim/downloadable/reference_Nmake.pdf
vcvars32.bat, который вы использовали для настройки своей среды? Вы можете попробовать другой? Сможете составить простой "Hello World!" Программа C в графическом интерфейсе Visual Studio, в которой есть #include <stdio.h>?
@AndrewHenle, полный путь - "C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ VC \ A вспомогательный \ Build", есть vcvars, vcvars32, vcvars64, vcvarsall, vcvarsamd64_arm, vcvarsamd64_x86, vcvars_arm86_amd64 и vcvars_arm86_amd64 и vcvars_arm86_amd64 из них работает, да, я могу создать WindowsDesktopWizard и запустить проект C
IIRC, с VS2107 вам нужно использовать пакет под названием (something)devenv.bat, чтобы получить правильную среду




После некоторого времени поиска и сбоя мне пришлось сгенерировать его с помощью VS13 vsvars32.bat, обратите внимание, что vsvars, а не vcvars VS17, которые сгенерировали 32-разрядную dll, и поскольку моя платформа 64-разрядная, мне пришлось установить и переключиться на 32-разрядную JVM, и проблема в решено.
Я мог бы сделать это и с VS15.
Вы уверены, что ваш jvm 32-битный? В 2018 это звучит странно, т.е. в большинстве случаев нужен vcvars64.bat