Android 依赖三方so库报错找不到dlopen failed:xxx not found 显示磁盘路径

场景:

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库的目录添加到配置中, 

 同步后重新编译, 正常运行...

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值