2017-10-19 6 views
0

J'ai un projet avec un certain JNI à l'intérieur avec un makefile pour compiler un dll sous Windows 10 64 bits. Pour une contrainte logicielle, ma bibliothèque dll doit être compilée pour JRE 32 bits.Pourquoi ma méthode lance un UnsatisfiedLinkError?

Mon makefile est la suivante:

CC32=C:\i686-w64-mingw32-gcc\bin\i686-w64-mingw32-g++.exe 
CC64=C:\Program\ Files\mingw-w64\x86_64-6.2.0-win32-seh-rt_v5-rev1\mingw64\bin\g++.exe 

all: LibJNI32.dll LibJNI64.dll 

LibJNI32.dll: LibJNI.cpp LibJNI.h 
    ${CC32} -shared -o [email protected] $< -mtune=generic -m32 -std=gnu++11 -O2 \ 
    -I. -IC:\Program\ Files\ (x86)\Java\jdk1.8.0_151\include -IC:\Program\ Files\ (x86)\Java\jdk1.8.0_151\include\win32 

LibJNI64.dll: LibJNI.cpp LibJNI.h 
    ${CC64} -shared -o [email protected] $< -mtune=generic -fPIC -m64 -std=gnu++11 -O2 \ 
    -I. -IC:\Program\ Files\Java\jdk1.8.0_121\include -IC:\Program\ Files\Java\jdk1.8.0_121\include\win32 

LibJNI.h: LibJNI.java 
    javah -o LibJNI.h -cp ../java my.package.LibJNI 

Bien que les deux LibJNI32.dll et LibJNI64.dll sont bien chargés par mon programme java, seul appel à JNI avec les œuvres LibJNI64.dll. Ceux de LibJNI32.dll jettent un UnsatifiedLinkError.

Y a-t-il quelque chose qui manque à mon makefile pour bien compiler en 32 bits?

+0

alors quelle version de Java utilisez-vous? une version 64 bits peut-être? – UKMonkey

+0

J'utilise un jre 32 bits. Mais depuis que j'ai posté ma question, mon problème s'est traduit par "Impossible de trouver les bibliothèques dépendantes". – dooxe

+0

Incase vous êtes toujours coincé - Dépendance walker est votre ami pour cela – UKMonkey

Répondre

0

Si vous jouez avec 32/64 bits libs il pourrait être un combat lorsque vous partagez les bibliothèques système commun:

  • assurez-vous de mettre 32 bits libs sur PATH (ceux que votre DLL dépend)
  • faire un simple code d'emballage et vérifiez votre DLL fonctionne en dehors JVM