나는이 문제에 관해 많은 게시물을 읽었지만 아무도 내 문제를 해결하지 못했습니다.다른 JNI UnsatisfiedLinkError DLL 문제
Java 프로세스에서 Windows 메시지를 보낼 수있는 매우 작은 DLL이 있습니다. 그때 나는 만족 링크 오류가 VS2005와/MT와 연결하고 모든 괜찮지 만 내 DLL을 만들려고하면 MSVCRT에 따라 달라집니다 및/MD와 링크 것으로 집계했다
FindWindowEx(...)
SendMessage(...)
그것은 단순히 호출합니다.
에서 java.lang.UnsatisfiedLinkError : MyDll.dll : 종속 라이브러리가이 누락 된 DLL을, GPSVC.DLL 및 IESHIMS.DLL을 가지고 Depends.exe를에 따르면
를 찾을 수 없습니다. 첫 번째 파일은 c : \ windows \ system32에 있고 두 번째 파일은 winsxs 경로에 있습니다. c : \ windows \ system32에서로드 된 다른 DLL의로드가 있고 GPSVC.DLL이 win7x64 시스템의 관리자 일지라도 실행할 수 없다는 말은 이상합니다.
어쨌든, 나는에 의해 내 자바에서 그 DLL을 모두의 부하를 강제로 시도 (간체 - 내가 java.library.path의 통제 아니에요)
Field field = ClassLoader.class.getDeclaredField("usr_paths");
field.setAccessible(true);
String[] paths = (String[]) field.get(null);
String[] tmp = new String[paths.length + 2];
System.arraycopy(paths, 0, tmp, 0, paths.length);
tmp[paths.length] = "c:/windows/system32";
tmp[paths.length + 1] = "c:/Windows/winsxs/amd64_microsoft-windows-ie-ieshims_31bf3856ad364e35_8.0.7601.17514_none_c06d7c9c27da8591";
field.set(null, tmp);
하지만 그 차이를하지 않았다. 정적으로 연결되도록 폴백 할 수는 있지만 오히려하지 않을 것입니다.
다음에 시도 할 수있는 아이디어가 있습니까? Antony
나는 내 DLL을 32 비트와 64 비트 버전으로 만들고 필요에 따라 x86 또는 amd64로 vcvarsall을 실행합니다. 내 CL 명령 행은 다음과 같습니다 : cl/I % JAVA_HOME % \ include/I % JAVA_HOME % \ include \ win32/nologo/W4/EHsc/O2/D "NDEBUG"/ D "WIN32"/ D _USRDLL/MT/LD PresencePump.cpp /FePresencePump-%1.dll/link/subsystem : windows : 위의 두 DLL은/MT 정적 링크를 사용하여 작동하지만/MD/D _AFXDLL을 사용하면 문제가 발생합니다. – adb