我使用GCC標誌-c和-o Name.dll在Windows(64位)上編譯了本機DLL文件。JNI:編譯64位本機庫的問題
當我做System.load( 「fullpahhere」),我得到這個錯誤:
java.lang.UnsatisfiedLinkError: RenderControl.dll: %1 is not a valid Win32 application
如果我重新編譯添加一個空的main()方法的C源代碼和刪除-c標誌,它然後使用UnsatisfiedLinkError失敗,說明它無法在64位機器上加載32位DLL。
爲什麼Java調用沒有main方法的DLL無效?這不是毀了DLL文件和JNI的全部點嗎?
更新
我固定在main()的問題。這GCC調用設置工作:
gcc -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -I "C:\Program Files\Java\jdk1.6.0_32\include" -I "C:\Program Files\Java\jdk1.6.0_32\include\win32" -shared *.c -o lib.dll
我還需要弄清楚的JVM架構的問題,但是。
我在哪裏可以找到能夠編譯64位代碼的MinGW安裝?看來我的標準MinGW安裝只有32位。
如果我能掌握這一點,我該如何決定在Java中加載哪個庫?是否有一個系統屬性顯示JVM拱門(不是的OS拱)?
我正在查看MinGW-w64,並且我確實下載了它,但我無法弄清楚如何安裝它? (我有一個zip文件的Windows 64位下載 - 不幸的是沒有安裝exe文件...) – bgroenks
哦,當然,他們只有linux二進制文件。 – 2012-12-08 22:44:41
你也知道爲什麼DLL被標記爲無效,如果沒有main()? – bgroenks