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

[诡异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条)

报告相同问题?

悬赏问题

  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退