簡體   English   中英

找不到符號

[英]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.

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