场景:
app中有 a模块, 在a模块中通过cmake 构建 libso_a.so ,
libso_a.so 依赖编译好的三方库 libso_b.so,
编译运行后 打开即崩溃....
问题一:
so库加载失败,无法找到 且报错路径显示为磁盘路径;
.....
java.lang.UnsatisfiedLinkError: dlopen failed: library "E:/Hx/xxxxxxxxx/arm64-v8a/libso_b.so" not found
通过readelf查看so_a的依赖,确实为so的全路径:
cmakelists.txt中的依赖为:
...
add_library(
so_b
SHARED
IMPORTED
)
set_target_properties(
so_b
PROPERTIES IMPORTED_LOCATION
${CMAKE_CURRENT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libso_b.so
)
target_link_libraries(
so_a
so_b
${log-lib}
)
解决办法:
方法1、
不使用add_library()方式依赖,
直接在target_link_libraries()中设置依赖so_b的位置;
方法2、
还是使用add_library()的方式添加依赖,
通过设置添加配置,不使用全路径链接
set_property(TARGET so_b PROPERTY IMPORTED_NO_SONAME 1)
问题二:
同样报错,显示 dlopen failed xxx.so not found......但路径不是全路径了
通过查看debug的apk 包 发现 so_b.so 未正常打入apk中,
so库的位置在moudule中的 jinLibs/中, 解决方法就是将so库的目录添加到配置中,
文章来源:https://www.toymoban.com/news/detail-780183.html
同步后重新编译, 正常运行...文章来源地址https://www.toymoban.com/news/detail-780183.html
到了这里,关于Android 依赖三方so库报错找不到dlopen failed:xxx not found 显示磁盘路径的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!