【发布时间】:2015-02-20 21:48:27
【问题描述】:
我正在使用崩溃报告服务跟踪我们的 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)
Application.mk:
APP_STL := stlport_static
APP_CFLAGS += -std=c++11
【问题讨论】:
-
您找到原因了吗?我正在构建的本机库也有同样的问题。很少有用户看到它,但有些用户收到由
empty/missing DT_HASH in "libGLESv3.so" (built with --hash-style=gnu?)引起的 java.lang.UnsatisfiedLinkError
标签: android c++ android-ndk linker java-native-interface