Using the JNI with QT - Lib/DLLs are giving a file format error
-
It looks like the jvm DLL depends on at least one more DLL. You can use DependencyWalker to check which dependencies you have.
@jsulm I tried using the DependencyWalker on the JVM.dll, but it gave me some very strange results. I got a LOT of missing DLLs for things like API-MS-WIN-*.dll as you can see from the images here: http://imgur.com/a/h1CvW
There doesn't seem to be any other DLLs missing as far as I can tell.
-
Hi maybe not a missing DLL, but perhaps too many, it could be because you have more than one version of Java installed (32-bit and 64-bit).
Either uninstall all the Java versions you can find on your PC and reinstall just the one you need.
Or you can try to change the PATH env. variable so that the first entry in it points to your correct Java version, open a CMD window:
PATH = "C:\Program Files (x86)\Java\jre1.8.0_74\bin\client";%PATH%
and try to start your app from that CMD window.
-
I just tried doing that, however my program will not run outside of QT for some reason? If I click the run button in QT the program executes fine (but then gives me the JVM error as before), but if I run the program from the command line or by double clicking on it I get an error saying:
The procedure entry point __cxa_throw_bad_array_new_length could not be located in the dynamic link library D:\My Documents\Qt Projects\build-PROGRAM-Desktop_Qt_5_5_1_MinGW_32bit-Release\debug\Qt5Core.dll
I have also tried it with the release version of my program but I get the same error.
-
Hi I think that error occurs because you copied the wrong Qt5Core.dll (from Qt Creators' bin directory) instead of the one in C:\Qt\5.5\mingw492_32\bin. Instead of copying manually, you could try windeployqt on your .exe file.
@hskoglund I just deleted all the .dlls in my folder and copied
libgcc_s_dw2-1.dll
libwinpthread-1.dll
Qt5Cored.dll
Qt5GUId.dll
Qt5Widgetsd.dllfrom the C:\Qt\5.5\mingw492_32\bin
into the folder where my .exe file is, unfortunately I still get the same entry point error. -
Hmm, that error with "__cxa_throw_bad_array_new_length" is most likely due to a mixup of your mingw and Visual Studio 2013 installation flavors of Qt.
You can check what flavor that Qt5Cored.dll you copied has, by downloading and running Dependency Walker, open Qt5Cored.dll and see what dlls it needs. Maybe you need to reinstall Qt :-(
-
Managed to eventually get windeployqt to work, and that solved my entry point error so thank you! No idea why it wasn't accepting the DLLs that I had copied manually.
EDIT: I should add that windeployqt got rid of both the Entry Point error I had, along with the unable to find native library error. I have no idea how it fixed them both, perhaps it gave me a different JVM.dll.