투케이2K

306. (TWOK/ERROR) [Android] 안드로이드 UnsatisfiedLinkError: dlopen failed: library .so not found 본문

투케이2K 에러관리

306. (TWOK/ERROR) [Android] 안드로이드 UnsatisfiedLinkError: dlopen failed: library .so not found

투케이2K 2025. 5. 2. 18:12

[환경 설정 및 설명]

프로그램 : AndroidStudio

설 명 : [Android] 안드로이드 UnsatisfiedLinkError: dlopen failed: library .so not found

 

[설 명]

--------------------------------------------------------------------------
[개발 및 테스트 환경]
--------------------------------------------------------------------------

- 제목 : [Android] 안드로이드 UnsatisfiedLinkError: dlopen failed: library .so not found

- 테스트 환경 : 삼성 갤럭시 스마트폰 / 안드로이드 / Android

--------------------------------------------------------------------------





--------------------------------------------------------------------------
[에러 원인]
--------------------------------------------------------------------------

1. JNI 안드로이드 CMake 로 생성 된 C++ 및 C 모듈 빌드 수행 시 jniLibs 에 비트 호환 so 파일이 포함 되어 있지 않아서 발생하는 에러


2. Java 및 Kotlin 프로그램에서 System.loadLibrary 사용해 native 모듈 로드 시 앱 크래시 발생


3. 에러 발생 로그 전문 : 

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.android.test, PID: 3403
    java.lang.UnsatisfiedLinkError: dlopen failed: library "libnativelib.so" not found
        at java.lang.Runtime.loadLibrary0(Runtime.java:1082)
        at java.lang.Runtime.loadLibrary0(Runtime.java:1003)
        at java.lang.System.loadLibrary(System.java:1661)

--------------------------------------------------------------------------





--------------------------------------------------------------------------
[해결 방법]
--------------------------------------------------------------------------

1. JNI 안드로이드 CMake 로 생성 된 C++ 및 C 모듈 내에 jniLibs 폴더 생성 후 각 비트 호환에 맞는 so 파일 추가 실시

  >> jniLibs 폴더 >> arm64-v8a , arm64-v7a , x86 , x86_64 폴더에 so 파일 추가 실시


2. CMake 에서 CMakeLists.txt 파일 수정 (set_target_properties 추가해 모듈 jniLibs 폴더 내에 있는 so 파일 지정)

# -------------------------------------------------

cmake_minimum_required(VERSION 3.18.1)

project("nativelib")

# -------------------------------------------------

set_target_properties(  --------------------------------> jniLibs 폴더 내에 있는 so 파일 지정
        makefile
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libnativelib.so)

# -------------------------------------------------

# TODO [생성된 파일 빌드를 수행하기 위해 헤더파일 및 구현부 추가 실시]

add_library( # Sets the name of the library.
        nativelib

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        nativelib.cpp

        aes.c
        native_reader.c)

# -------------------------------------------------

find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)

# -------------------------------------------------

target_link_libraries( # Specifies the target library.
        nativelib

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})

# -------------------------------------------------


※ 참고 : CMake 로 생성 된 C++ 및 C 모듈에서 각 비트 호환에 맞는 so 파일 찾기 방법

  >> 이전에 정상 빌드 된 APK 파일 내부 > lib 폴더에 arm64-v8a , arm64-v7a , x86 , x86_64 각 비트 호환 네이티브 so 파일 확인 (안드로이드 스튜디오 Analyze APK 툴 사용)

  >> apk 파일 압축 해제 수행 후 > arm64-v8a , arm64-v7a , x86 , x86_64 각 비트 호환 네이티브 so 파일 복사 및 안드로이드 프로젝트 네이티브 모듈 jniLibs 폴더에 추가 실시


※ 참고 : 네이티브 모듈 so 파일 생성은 프로젝트 apk 파일 빌드 수행 시 생성 됩니다 (Build Apk - debug apk 파일)

--------------------------------------------------------------------------





--------------------------------------------------------------------------
[참고 사이트]
--------------------------------------------------------------------------

[Android Native Library] [NDK] [JNI] [cpp] 안드로이드 에서 C++ 코드 사용 방법 - CMake 모듈 생성 방법

https://blog.naver.com/kkh0977/223012296306?trackingCode=blog_bloghome_searchlist


[Android Native Library] [NDK] [JNI] [cpp] 안드로이드 에서 C 코드 사용 방법 - CMake 모듈 생성 방법

https://blog.naver.com/kkh0977/223013374341?trackingCode=blog_bloghome_searchlist


[Cmake 및 JNI 문법 참고 사이트]

https://blog.naver.com/kkh0977/223013389575?trackingCode=blog_bloghome_searchlist


[빌드 에러 - Cmake 3.10.2 not found in SDK, PATH or by cmake.dir prop]

https://blog.naver.com/kkh0977/223434439459?trackingCode=blog_bloghome_searchlist

--------------------------------------------------------------------------
 
반응형
Comments