gpt4 book ai didi

Android NDK 不满意链接错误 : "dlopen failed: empty/missing DT_HASH"

转载 作者:可可西里 更新时间:2023-11-01 18:35:41 33 4
gpt4 key购买 nike

我正在使用崩溃报告服务跟踪我们的 Android 应用程序(使用 NDK 加载自定义 C++ 库)的崩溃。少数用户遇到以下崩溃:

java.lang.UnsatisfiedLinkError: dlopen failed: empty/missing DT_HASH in "cpplibrary.so" (built with --hash-style=gnu?)
at java.lang.Runtime.loadLibrary(Runtime.java:365)
at java.lang.System.loadLibrary(System.java:526)

我可以在 Internet 上找到关于此错误的几次提及(例如这个 Google Groups post )讨论了构建库的问题,这导致每次运行应用程序时都会发生此错误。关于为什么这种情况会偶尔发生的信息很少。 This post是我能找到的最接近的。

根据崩溃痕迹,似乎任何特定用户都会不断地经历这种情况;我不确定这些用户是否能够正确加载库。有没有人知道什么可能导致这种情况有时发生?我可以通过不同的方式构建 NDK 来尝试阻止它吗?

谢谢!

编辑:This post提到了两种有条件地获得此类错误的方法;我会调查他们。

Edit2:构建文件:Android.mk(节选):

include $(CLEAR_VARS)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_C_INCLUDES := <Source Path>...
LOCAL_CFLAGS := -DANDROID -Wall
LOCAL_CPPFLAGS := -DENABLE_SDK_DEBUGGING=1 -DENABLE_SDK_LOGGING=1
LOCAL_MODULE := cpplibrary
LOCAL_SRC_FILES := <Source Files> / ...

LOCAL_LDLIBS := -llog -landroid
LOCAL_STATIC_LIBRARIES := cpplibrary
include $(BUILD_SHARED_LIBRARY)

应用程序.mk:

APP_STL := stlport_static
APP_CFLAGS += -std=c++11

最佳答案

如果您是第三方构建 .so 库供他人使用,设置 -Wl,--hash-style=both 似乎是最好的主意。这使您可以更快地加载 Gnu 风格的散列和 SysV 散列的向后兼容性。

如果您仅支持 Android 8 及更高版本,则无需支持 SysV 哈希。

关于Android NDK 不满意链接错误 : "dlopen failed: empty/missing DT_HASH",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28638809/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com