gpt4 book ai didi

android - 意外的 e_type : 1 Linking release library using JNI + CMake + Android. mk

转载 作者:行者123 更新时间:2023-11-29 00:19:51 24 4
gpt4 key购买 nike

我使用 JNI 编译主跨平台库,使用 CMake 编译库路径中的所有库。

  • 我的项目使用 2 个动态库(libfoo.so 需要 libandroid-fooa.so)和一些静态依赖项,正确封装。
  • 使用变量 CMAKE_BUILD_TYPE=Debug 工作正常,但使用 Release,当启动我的 Android 应用时,抛出:

  • 我使用傻瓜 Android.mk 启动我的 Android 项目,只是为了安装在 libs/armeabi-v7a 中并正确链接库:

    05-27 08:35:35.194: E/dalvikvm(10366): dlopen("/data/app-lib/com.stackoverflow.project-2/libandroid-fooa.so") 失败:dlopen 失败:"/data/app-lib/com.stackoverflow.project-2/libandroid-fooa.so"有意外的 e_type: 1

    05-27 08:35:35.204: E/AndroidRuntime(10366): 进程:com.stackoverflow.project-2,PID:1036605-27 08:35:35.204:E/AndroidRuntime(10366):java.lang.UnsatisfiedLinkError:dlopen 失败:“/data/app-lib/com.stackoverflow.project-2/libandroid-fooa.so”有意外的 e_type : 105-27 08:35:35.204: E/AndroidRuntime(10366): 在 java.lang.Runtime.loadLibrary(Runtime.java:364)

Android.mk:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := android-opencvcamera_4_4-prebuilt
LOCAL_SRC_FILES := ../../../resources/lib/opencv/android/OpenCV-2.4.8-android-sdk/sdk/native/libs/armeabi-v7a/libnative_camera_r4.4.0.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := android-opencvcamera_4_2-prebuilt
LOCAL_SRC_FILES := ../../../resources/lib/opencv/android/OpenCV-2.4.8-android-sdk/sdk/native/libs/armeabi-v7a/libnative_camera_r4.2.0.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := android-foo-prebuilt
#LOCAL_SRC_FILES := ../../../../build/Android/trunk/lib/libfoo_d.so // work in debug
LOCAL_SRC_FILES := ../../../../build/Android/trunk/lib/libfoo.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := android-fooa-prebuilt
#LOCAL_SRC_FILES := ../../../../build/Android/trunk/lib/libandroid-fooa_d.so // work in debug
LOCAL_SRC_FILES := ../../../../build/Android/trunk/lib/libandroid-fooa.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := android-void
LOCAL_SRC_FILES := android-void.cpp // Has no code, generated by eclipse native option

include $(BUILD_SHARED_LIBRARY)
  • 在 Debug 中使用 android-ndk-r9d 和 eclipse 启动命令:

    $(ANDROID_NDK)/ndk-build NDK_DEBUG=1

工作正常。在断点处停止,但在我停止时不提供调试信息,我不知道这是否重要!

  • 发布时:

    $(ANDROID_NDK)/ndk-build NDK_DEBUG=0

然后我将库加载到我的 Java 文件中:

// Load Native Libraries
// =========================================================================
static
{
//System.loadLibrary("foo_d");
//System.loadLibrary("android-fooa_d");
System.loadLibrary("foo");
System.loadLibrary("android-fooa");
}

出现链接问题。

最佳答案

我发现了问题,但我不知道为什么会这样。当我启动应用程序时,ndk-build 在 libs/armeabi-v7a 中安装库,但是 android-fooa.so 是错误的,将大小从 $(LIBRARY_PATH) 中的原始大小 5.6 Mb 更改为 libs/中的 < 500 kbs armeabi-v7a,因此库在启动过程中已损坏。

我已经解决了这个问题,手动复制库,并避免在 eclipse 中使用 ndk-build。如果我使用 ndk-build,库将再次损坏。

更新:

使用 CMake 编译并将库安装到 libs/armeabi-v7a 中可能会导致问题。所以我用 CMake 安装了预构建库到 jni/prebuilt 并将它们添加到 Android.mk

对每个预建库使用这些 likes 必须有效:

# Prebuilt lib code
include $(CLEAR_VARS)
LOCAL_MODULE := android-foo
LOCAL_SRC_FILES := prebuilt/libandroid-foo.so
include $(PREBUILT_SHARED_LIBRARY)

关于android - 意外的 e_type : 1 Linking release library using JNI + CMake + Android. mk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23882826/

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