1
我有一个本机库('处理器'),我正在使用依赖libjpeg的Android NDK构建。但是,这个问题可能与Android方面无关。我已经成功地建立了图书馆,但是当我尝试运行库无法与此错误正确加载:如果我nm -D processor.so
它确实包含符号找不到符号
failed: dlopen failed: cannot locate symbol "jpeg_mem_src"
但是:
...
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端加载它
任何想法为什么符号存在,但无法找到?谢谢!
啊,谢谢。所以如果他们没有定义'U',那么我可能在生成图书馆时做了错误的事情? (我已经尝试添加'System.loadLibrary(“jpeg”)',但我得到相同的错误,所以有可能我由于某种原因生成了所有库) – Anthony
在libjpeg.so中: 000000000001dca0 T jpeg_mem_src – Anthony
您的库取决于libjpeg(如在build.gradle文件的依赖项块中所述)。这意味着你的库需要'libjpeg.so'文件在被加载之前被加载。你可以通过在你的文件上运行'readelf -d'来检查它,ti会显示你所有其他需要的共享库。您可以安全地忽略libc,因为它始终由Android加载,但您必须手动加载其他libc。 – NiBZ