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