2013-01-31 82 views
1

簡介: 該庫(稱爲myEngine.so)使用jni來包裝原生c/C++代碼並提供java原生方法的接口。我目前使用android ndk的ndk-build腳本構建它。Android ndk-built共享庫結果爲java.lang.UnsatisfiedLinkError

根據dalvikvm日誌,加載System.loadLibrary("myEngine");運行良好,並且java.lang.UnsatisfiedLinkError異常附帶以下類型的消息:No implementation found for native LFoo;.myfunc()V

問題: 當他們建議in this FAQ,我查nm myEngine.so輸出,並說:「沒有符號」。這看起來很奇怪,因爲我檢查了JNIEXPORT限定符的所有jni代碼,沒關係。 然而,readelf -Ws myEngine.so給我這個函數的名稱正確的符號表中未重整,像這樣的(?):

Symbol table .dynsym contains 3237 entries: 

Num: Value Size Type Bind Vis  Ndx Name 

0: 00000000  0 NOTYPE LOCAL DEFAULT UND 
1: 0003c0d0  0 SECTION LOCAL DEFAULT 7 
2: 0027e078  0 SECTION LOCAL DEFAULT 12 
... 
56: 0003d3c9 36 FUNC GLOBAL DEFAULT 7 Java_Foo_myfunc 
... 

這可能是一個問題,我該如何避免這種例外?

非常感謝。

回答

0

看起來像一個錯別字 - 請注意,錯誤消息嬰兒牀關於找不到「LFoo」,而您的功能是「Java_Foo_myfunc」。如果你的包名稱有LFoo,你需要調用你的函數「Java_LFoo_myfunc」。