MagicGGGGGGGGGGG 2018-12-21 13:40 采纳率: 100%
浏览 1707
已采纳

[诡异bug]Android 调用so库的时候报 “dlopen failed: recursive link to xxx.so”

相关背景:

最近在封装一个jni,就是根据.h文件封装给别人的so库封装一套jni接口供java层去调用。

** 错误信息**
图片说明

已经排除的原因

  • 编译so库错误:可以参考比较奇怪的现象。已经在华为手机上运行过了。
  • so库缺少:如果少放了某个so库,提示的错误和这个不同。所以排除so库缺少的原因。
  • 平台不匹配:调试的机器为v7a,编译的so库也为v7a。所以不是平台不匹配的原因。
  • 路径错误:这个就更不可能了。

比较奇怪的现象

  • 因为调试的机器是公司定制的,所以我之前一直在这个机器上调试。有一天我放在自己的手机上(华为荣耀10)调试后,发现是可以正常运行的。

Application.mk

APP_STL := gnustl_shared
APP_PLATFORM := android-21
APP_ABI := armeabi-v7a

Android.mk

#Android.mk
LOCAL_PATH := $(call my-dir)


#e.so模块
include $(CLEAR_VARS)
LOCAL_MODULE    := e
LOCAL_SRC_FILES := armeabi-v7a/e.so
include $(PREBUILT_SHARED_LIBRARY)

#f.a模块
include $(CLEAR_VARS)
LOCAL_MODULE    := f
LOCAL_SRC_FILES := armeabi-v7a/f.a
include $(PREBUILT_STATIC_LIBRARY)

#libgnustl_shared模块
include $(CLEAR_VARS)
LOCAL_MODULE    := g
LOCAL_SRC_FILES := armeabi-v7a/libgnustl_shared.so
include $(PREBUILT_SHARED_LIBRARY)

#自己的编译模块
include $(CLEAR_VARS)
LOCAL_MODULE    := faceDetectJni
LOCAL_SRC_FILES := faceDetectJni.c
LOCAL_LDLIBS    += -L$(SYSROOT)/lib -llog

#这里引入第三方编译静态模块
LOCAL_STATIC_LIBRARIES := f
#这里引入第三方编译动态模块
LOCAL_SHARED_LIBRARIES :=e\
g
include $(BUILD_SHARED_LIBRARY)

  • 写回答

2条回答 默认 最新

  • MagicGGGGGGGGGGG 2018-12-23 04:27
    关注

    找到一个解决办法,就是讲so库全部编译成.a库然后再封装。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 SQL server表计算问题
  • ¥15 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题
  • ¥20 Oracle替换.dbf文件后无法连接,如何解决?(相关搜索:数据库|死循环)
  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出