32-разрядная dll для интерфейса Java для 64-разрядной системы

E:\Code\Java\JNITest>java test Exception in thread "main" java.lang.UnsatisfiedLinkError: E:\Code\Java\JNITest\test.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(Unknown Source) at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System.loadLibrary(Unknown Source) at test.main(test.java:16)` 

При использовании Java Native Interface у меня возникла проблема, вызвавшая эту ошибку. Я считаю, это связано с тем, что я скомпилировал .dll с MinGW, который компилируется в 32-разрядную .dll, в то время как моя система 64-разрядная, и поэтому моя Java работает на 64-битной. В любом случае, чтобы заставить Java работать на 32 бита?

Вам нужно будет установить 32-битную JVM, и вы сможете запустить свой код.

Если вы собираетесь распространять свое приложение, вам нужно будет создать 32-битную и 64-разрядную версии вашей DLL. Затем используйте следующую технику, чтобы загрузить соответствующую DLL независимо от ваших клиентов. Добавьте к вашему сгенерированному выходному файлу 32 или 64 (MyJniDLL32.dll и MyJniDLL64.dll).

  String archDataModel = System.getProperty("sun.arch.data.model"); System.loadLibrary(libraryName+archDataModel); 

Просто чтобы указать очевидное: для загрузки встроенной библиотеки, построенной для 32-битной архитектуры, вы должны заставить JVM начать работу в 32-битном режиме.

 java -d32 ... 

Возможно, вам нужно установить более старую JVM для вашей платформы (например, Java-платформа Oracle 7 на OS X имеет только 64-разрядную версию, вам нужно получить Java-версию от Apple из своей базы знаний).

Я получил то же сообщение об ошибке (без stacktrace) после установки плагина Java для браузера Chrome.

Повторная установка JDK / JRE (это среда разработки) исправила это для меня.

  1. Загрузите mingw-w64 .
  2. Обновите переменную среды PATH.
  3. Создайте C-программу с именем test.c, которая имеет реализацию для вашего метода.
  4. Выполните следующую команду cmd в командной строке.

    gcc -Wl, – add-stdcall-alias -I “% JAVA_HOME% \ include” -I “% JAVA_HOME% \ include \ win32” -shared -o test.dll test.c

Библиотеки DLL запускаются на родной ОС. Java просто делегирует вызов DLL, который очень тесно связан с ОС, на котором он скомпилирован. В общем, вы не можете сделать это прямолинейно, и вот путь .

Но есть обходные пути, такие как WOW64 , что позволяет. Пожалуйста, ознакомьтесь с этими ссылками ( 1 , 2 )

IA – это архитектура Itanium, поэтому AMD jvm пытается загрузить DLL, созданную для Itanium … не думаю, что это сработает.

http://en.wikipedia.org/wiki/Itanium

  • stoi и std :: to_string on mingw 4.7.1
  • MinGW / CxxTest причудливые ошибки
  • Что же такое Git Bash для Windows?
  • Спецификатор преобразования длинного двойника в C
  • Как уменьшить размер исполняемого файла, созданного компилятором MinGW g ++?
  • точка входа процедуры __gxx_personality_v0 не может быть расположена
  • Как создать протобуф Google в Windows с помощью MinGW?
  • Как установить MinGW-w64 и MSYS2?
  • to_string не является членом std, говорит g ++ (mingw)
  • Вложение бинарных капель с использованием gcc mingw
  • C ++: Поймать деление на нулевую ошибку
  • Interesting Posts

    Действиям ребенка не разрешено выполнять действия перенаправления после установки сайта на HTTPS

    Какой лучший способ расчета nCr

    JSON-LD Schema.org: несколько страниц видео / изображений

    Поверните несколько изображений PNG в анимацию 1280×720, закодированную в H264, для загрузки YouTube HD

    Может ли RDP зеркально отображать / теневую сессию локальной консоли? (Re: Win7, RDP и HTPC)

    Android: для чего используется android.R.id.content?

    Отключить приглашение конвертировать видео, скопированные в медиа-устройство

    Какова наилучшая практика для работы с паролями в репозиториях git?

    Как удалить все COM-порты из командной строки в Windows 7?

    Почему memcpy () и memmove () быстрее, чем указатели?

    Как мне перейти на подключенный сетевой диск в командной строке?

    Определить и изменить кодировку имени файла в Windows

    Реализация шаблона пула объектов C #

    Как заставить приложение получать трансляцию, когда другие приложения установлены или удалены

    Центр обновления Windows уничтожает мое интернет-соединение

    Давайте будем гением компьютера.