差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
java:jna:can_t_obtain_static_method的error [2017/07/11 14:41]
tony [How to duplicate and resolve?]
java:jna:can_t_obtain_static_method的error [2023/06/25 09:48] (目前版本)
行 12: 行 12:
   * 我們軟體的third-party libraries包含新版本JNA。   * 我們軟體的third-party libraries包含新版本JNA。
   * 我們軟體參考到客戶電腦中的JNA。   * 我們軟體參考到客戶電腦中的JNA。
-第一個問題我透過[[http://​alumnus.caltech.edu/​~leif/​opensource/​cpcheck/​CpCheckApp.html|Classpath Inspector]]確認過,並非我們問題。第二個問題,首先我透過設定CLASSPATH到環境變數中,並指定到4.3.0的jar檔路徑;可惜無法重現出問題。最後看了幾篇關於JNA與此相關的issue,推測應是JNA dll或so所造成的問題,所以我從jna.jar中抽取了jnidispatch.dll,並放置於PATH所設定的目錄中,就可以重現出此問題。\\+第一個問題我透過[[http://​alumnus.caltech.edu/​~leif/​opensource/​cpcheck/​CpCheckApp.html|Classpath Inspector]]確認過,並非我們問題。第二個問題,首先我透過設定CLASSPATH到環境變數中,並指定到4.3.0的jar檔路徑;可惜無法重現出問題(可能和service wrapper有關,無深究)。最後看了幾篇關於JNA與此相關的issue,推測應是JNA dll或so所造成的問題,所以我從jna.jar中抽取了jnidispatch.dll,並放置於PATH所設定的目錄中,就可以重現出此問題。\\
 {{:​java:​jna:​jna_dispatch_problem_with_mismatch_dll_jar.png?​600|}}\\ {{:​java:​jna:​jna_dispatch_problem_with_mismatch_dll_jar.png?​600|}}\\
 \\ \\
行 19: 行 19:
 -Djna.nosys=true -Djna.nosys=true
 </​code>​ </​code>​
 +從4.1.0版本的程式碼可以得知,當宣告此變數為true時,它會使用System.loadLibrary去讀jnidispatch,反之則是從classpath中讀:​
 +<code java>
 +if (!Boolean.getBoolean("​jna.nosys"​)) {
 +            try {
 + if (DEBUG_JNA_LOAD) {
 +     System.out.println("​Trying (via loadLibrary) " + libName);
 + }
 +                System.loadLibrary(libName);​
 +                if (DEBUG_JNA_LOAD) {
 +                    System.out.println("​Found jnidispatch on system path"​);​
 +                }
 +                return;
 +            }
 +            catch(UnsatisfiedLinkError e) {
 +            }
 +        }
 +        if (!Boolean.getBoolean("​jna.noclasspath"​)) {
 +            loadNativeDispatchLibraryFromClasspath();​
 +        }
 +        else {
 +            throw new UnsatisfiedLinkError("​Unable to locate JNA native support library"​);​
 +        }
 +</​code>​
 +假如客戶所裝軟體有使用到jnidispatch.dll且安裝於PATH中,就會有此問題。
 ===== Reference ===== ===== Reference =====
   * [[https://​github.com/​java-native-access/​jna/​blob/​4.1.0/​src/​com/​sun/​jna/​Native.java|JNA 4.1.0 source code]]   * [[https://​github.com/​java-native-access/​jna/​blob/​4.1.0/​src/​com/​sun/​jna/​Native.java|JNA 4.1.0 source code]]
行 25: 行 49:
   * [[https://​github.com/​java-native-access/​jna/​issues/​750|JNA 4.2.2 not working on android-arm]]   * [[https://​github.com/​java-native-access/​jna/​issues/​750|JNA 4.2.2 not working on android-arm]]
   * [[https://​github.com/​defold/​editor2-issues/​issues/​1019|其它軟體類似問題]]   * [[https://​github.com/​defold/​editor2-issues/​issues/​1019|其它軟體類似問題]]
 +  * [[https://​java-native-access.github.io/​jna/​4.1.0/​com/​sun/​jna/​Native.html|JNA 4.1.0 javadoc - Native]]
  
 =====    ===== =====    =====