我讀過很多關於此的帖子,但沒有解決我的問題。另一個JNI UnsatisfiedLinkError DLL問題
我有一個非常小的DLL,它允許Java進程發送Windows消息。它只是簡單地調用
FindWindowEx(...)
SendMessage(...)
我已經編譯與VS2005與/ MT和鏈接,所有的罰款,但如果我嘗試讓我的DLL依賴MSVCRT與/ MD鏈接,然後我得到了不合適的鏈接錯誤。
java.lang.UnsatisfiedLinkError中:MYDLL.DLL:找不到依賴庫
根據它的Depends.exe有兩個丟失的DLL,GPSVC.DLL和IESHIMS.DLL。第一個存在於c:\ windows \ system32中,第二個存在於winsxs路徑中。從c:\ windows \ system32加載其他DLL的負載和GPSVC.DLL是一個奇怪的,即使作爲管理員在我的win7x64機器上,我不能運行取決於 - 它說它沒有找到...
無論如何,我試圖通過迫使這兩個DLL文件的加載在我的Java(簡化 - 我不在的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);
但並沒有區別。我可以後備讓它靜態鏈接,但我寧願不。
關於接下來我可以嘗試的任何想法? 安東尼
我構建了一個32位和64位版本的DLL,並根據需要運行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 /鏈接/子系統:windows :這兩個DLL工作使用上面的/ MT靜態鏈接,但如果我使用/ MD/D _AFXDLL,那麼我有問題。 – adb