많은 양의 고유 코드가 여러 상호 의존 라이브러리로 포팅됩니다. Android 링커는 응용 프로그램 설치 디렉토리 /data/data/com.packagename.nnn/lib
이 아닌 /system/lib/
에서만 종속성을 표시하므로 코드로드가 실패합니다.Android에서 종속성이있는 공유 라이브러리로드
첫 번째 해결 방법으로 System.load() 을 사용하여 Java에서 모든 .so 파일을 올바르게 종속 순서으로로드했습니다. 이 솔루션은 플러그인 아키텍처로 인해 라이브러리 세트가 빌드에서 빌드로 변경되기 때문에 대부분 만족스럽지 않습니다. 또한 UI는 네이티브 라이브러리에 대해 많이 알 필요가 없습니다.
Android가 RPATH를 지원하지 않거나 앱의 LD_LIBRARY_PATH를 설정하지 않음을 발견했습니다. 유일한 해결책은 정규화 된 SONAME으로 라이브러리를 구축하는 것입니다.
그러나 일부 종속성은 사전 빌드되어 제공됩니다.
는 가능한이 .so를 정규화 SONAME이없는 필요한 경우에도 내 자신의 라이브러리로 정규화 필요한 태그를 컴파일인가?
또는 기존 .so를 수정하고 SONAME 또는 NEEDED를 다시 컴파일하지 않고 정규화 된 것으로 바꿀 수 있습니까?
@ tasaarni 혹시 이것을 알아 냈습니까? 나는이 정확한 문제에 대해 DLL 지옥에있다. 내 공유 라이브러리 의존성은 많은 Android 기기에 포함되어있는 libicu에 따라 다르지만 일반적으로 필요한 기호가없는 이전 버전입니다. 그래서 특별히 필요한 의존성 순서로 필요한 라이브러리를로드하려고했습니다 ('ndk-depends'에 따라) - 새로운 libicu가 이런 식으로 ok를로드하는 것처럼 보입니다. 그렇지만 의존 라이브러리가 심볼을 찾을 수없는 것처럼 보입니다. 필요해. 실종 된 단계가 있습니까? – ephemer