안드로이드 개발 질문/답변
(글 수 45,052)
ndk를 사용하고 있는데요.. 특정 기기에서 System.loadlibrary 실행시 오류가 발생합니다.
java.lang.UnsatisfiedLinkError: Couldn't load ahocorasick: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:429)
at java.lang.System.loadLibrary(System.java:554)
저도 항상 기기 5대정도로 테스트하는데 이 부분때문에 에러난 경우가 없으니 참 어렵습니다 ㅠ.
매주 50건정도씩 올라와서 수정은 해야할거 같은데 혹시 특정 기기에서만 System.loadlibrary 오류나는 현상을
해결해보신분 있으시면 알려주세요~
동일한 이름의 so가 /system/lib에 존재할 경우 로드가 안될 수 있습니다. 모단말의 경우 /system/lib에 libffmpeg.so가 들어가 있어서, 어플에 들어간 libffmpeg.so를 사용하지 못해 오류가 발생한 것을 본적이 있습니다.
그게 아니라면 사용하는 라이브러리에서 참소하는 so파일이 없거나 파라메터가 추가되는 등 달라졌을 때 발생합니다.
파일이 없음 어플에 넣어주면 해결 되지만. 파라메터가 달라졌음 달라진 심볼을 찾아야 하는데 찾기 쉽지는 않습니다.
찾는 법을 설명드리면, 참조하는 라이브러리를 ndk의 nm을 사용해서 덤프를 하면 함수명에 T, U 같은게 나올겁니다.
T는 해당 소스에 라이브러리가 있는 것이고 U는 외부에서 참조하는 라이브러리에 있는 함수들입니다. ,
이 U로 된 함수 중에서 빌드시 사용했던 함수 원형과 달라진게 있는지 비교하여, 달라진게 있다면 거기에 맞춰주셔야 합니다.