gpt4 book ai didi

android - 找不到符号

转载 作者:可可西里 更新时间:2023-11-01 11:40:55 46 4
gpt4 key购买 nike

我有一个 native 库(“处理器”),我正在使用依赖于 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"); 添加到您的静态 block 中,它就可以解决问题。

顺便说一句,您可以在 .so 文件中看到符号这一事实仅意味着您的文件正在使用它们,而不是您的 .so 提供了实现。您可以将其视为 nm 报告带有 U 字母的符号,表示 undefined

关于android - 找不到符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36139399/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com