簡體   English   中英

Jython UnsatisfiedLinkError對共享庫中的本機方法調用

[英]Jython UnsatisfiedLinkError on native method invocation in shared library

首先,這是正在工作的 ,然后我將描述什么不是:使用SWIG,我們已經采用了一些第三方代碼,並創建了Java和C包裝器源。 創建了Java類的jar文件和C包裝器代碼的共享庫。 我們有一個Java代碼庫,可以加載共享庫,並且可以根據需要調用本機代碼。 這是在Sun HostSpot JVM 1.5.0.14上運行的。 不用擔心。

現在,這不起作用 :使用相同的JVM,帶有Java包裝器代碼的jar文件和上面描述的相同共享庫,我試圖使用Jython來做一些腳本。 CLASSPATH和LD_LIBRARY_PATH環境變量已正確設置。 從Jython,我能夠運行java.lang.System.loadLibrary(...),並加載共享庫而不會出錯。 但是,當我在Jython腳本中為Java對象調用此庫中的第一個本機方法時,我從JVM獲得了一個UnsatisfiedLinkError

我在共享庫上運行了nm,我發現有問題的方法存在於庫中(對於JNI規范中描述的本機方法,名稱為mangling)。 那么,問題是,什么可以阻止JVM解析方法名稱?

我已經完成了JNI規范,我發現GC可以卸載一個庫。 在我調用方法之前會發生這種情況嗎? 還有什么可以導致這種失敗?

我以前遇到過這個問題。 在我的情況下,正在加載的DLL / .so庫具有未找到的進一步依賴性,並且錯誤消息僅報告了我試圖加載的庫。 我使用下面的工具來找出缺少的依賴項。

如果您使用的是Windows,請使用Process Monitor http://technet.microsoft.com/en-us/sysinternals/bb896645查看應用程序正在搜索的確切DLL。 您需要啟動Process Monitor,然后運行您的應用程序並過濾日志以查看您的應用程序正在查找哪些dll。

如果您使用的是linux,請使用strace( http://en.wikipedia.org/wiki/Strace )並查看缺少哪個共享庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM