[英]Cannot locate symbol
我有一個使用依賴 libjpeg 的 Android NDK 構建的本機庫(“處理器”)。 但是,此問題可能與 Android 方面無關。 我已經成功構建了該庫,但是當我嘗試運行該庫時,無法正確加載此錯誤:
failed: dlopen failed: cannot locate symbol "jpeg_mem_src"
但是,如果我nm -D processor.so
它確實包含符號:
...
U jpeg_CreateCompress
U jpeg_CreateDecompress
U jpeg_destroy_compress
U jpeg_destroy_decompress
U jpeg_finish_compress
U jpeg_finish_decompress
U jpeg_mem_dest
U jpeg_mem_src
U jpeg_read_header
U jpeg_read_scanlines
...
處理器 build.gradle:
sources {
main {
jni {
dependencies {
project ":jpeg"
}
}
}
}
ndk {
moduleName "processor"
cppFlags.add("-fexceptions")
ldLibs.add("log")
stl "gnustl_shared"
}
java端加載它:
static
{
try
{
Log.i("JNI", "Trying to load lib");
System.loadLibrary("gnustl_shared");
System.loadLibrary("processor");
}
catch (UnsatisfiedLinkError ule)
{
Log.e("JNI", ule.toString());
}
}
知道為什么符號存在,但找不到嗎? 謝謝!
根據 Android 版本,您必須手動加載 jpeg 庫(並將其也包含在您的 apk 中!)
所以只需添加一個System.loadLibrary("jpeg");
到您的靜態塊,它應該可以解決問題。
順便說一句,您可以在.so
文件中看到符號這一事實僅意味着您的文件正在使用它們,而不是您的.so
提供了一個實現。 您可以看到nm
報告帶有U
字母的符號,表示undefined
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.