dlopen failed: library “libc++.so“ not found问题解决

admin2024-08-27  6

一、情况描述

最近遇到的一个项目中,使用了一个so库,这个so库中会去调用另一个so,但是在运行时会提示

dlopen failed: library "libc++.so" not found: needed by /data/app/~~D00W8e9ltq0qAmTYszJlCw==/com.xxx.xxx-Fnp4Vw9VDWGnn3Wj-gBGVQ==/base.apk!/lib/riscv64/libxxx.so in namespace classloader-namespace

这个libxxx.so是我自己的so依赖的第三方的一个so,我使用的是CMake来生成构建文件,网上查资料大部分都是"libc++_shared.so" not found,他们的方法大部分我都尝试过,包括externalNativeBuild中添加arguments “-DANDROID_STL=c++_shared”,或者把 libc++.so 复制到 libxxx.so 同级目录,但这些都是因为这些so文件本身缺少libc++.so,但我的情况是依赖的另一个so缺少该文件,也不能重新生成libxxx.so,缺少对应的c文件。

二、解决方法

#导入第三方so包,并声明为 IMPORTED 属性,指明只是想把 so 导入到项目中
add_library(NEEDED_LIBRARY SHARED IMPORTED)
add_library(C++ SHARED IMPORTED)
#指明 so 库的路径,CMAKE_SOURCE_DIR 表示 CMakeLists.txt 的路径
set_target_properties(
        NEEDED_LIBRARY
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/../lib/${ANDROID_ABI}/libxxx.so)
set_target_properties(
        C++
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/../lib/${ANDROID_ABI}/libc++.so)
target_link_libraries( 
	your_target_library,
	# Links the target library to the C++ library
        C++
        NEEDED_LIBRARY	
        )
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!