2016-10-20 3 views
0

armeabi-v7a 용 NDK (r11b)를 사용하여 안드로이드 용 라이브러리를 구축 중이며 다른 버전의 libgnustl_shared.so을 발견했으며 이유를 이해할 수 없습니다. NDK 폴더에서 libgnustl_shared.so의 출처는 어디입니까? 내가 만든 후에 크기가 왜 다른가요?

  • (안드로이드 NDK-r11b의 \ 소스에서 \ CXX-STL의 \의 GNU-된 libstdC++ \ \ armeabi-V7A \ libgnustl_shared.so 4.9 \ libs와)의 크기가 5593ko입니다.
  • ndk-build.cmd를 사용하여 프로젝트 (여러 라이브러리)를 빌드 한 후 라이브러리 (libs \ armeabi-v7a \ libgnustl_shared.so)의 파일 크기는 694ko입니다.
  • QtCreator를 사용하여 프로젝트 (여러 라이브러리)를 빌드 한 후 android-build \ libs \ armeabi-v7a \ libgnustl_shared.so 파일의 파일 크기는 846ko입니다. apk에 패키지 된 라이브러리 (android-build \ bin)는 동일한 크기입니다. 참고 또한 QtCreator 빌드 로그 보고서는 (안드로이드 NDK-r11b/소스/CXX-STL/GNU-된 libstdC++/4.9/libs와/armeabi-V7A/libgnustl_shared.so)

홈페이지에서 파일을 집어 질문 : 왜 컴파일 후 파일이 원래 파일보다 작습니까? 링커/컴파일러가 어느 시점에서 파일을 축소합니까 (사용되지 않는 기호 제거)?

보너스 질문 : 마침내 QtCreator 내 프로젝트를 빌드 (846ko의 libgnustl_shared.so로 끝나는) 내 그래서 파일 (그러나 libgnustl_shared.so) 자신에 그것을 통합 할 것이다 다른 사람에 제공 신청. 그는 자신의 응용 프로그램을 배포 한 후 IDE (안드로이드 스튜디오)에서 694ko의 libgnustl_shared.so와 함께 배포하고 내 코드가 STL 작업에서 충돌하기 시작합니다. 그 충돌은 libgnustl_shared.so와의 불일치로 인해 발생할 수 있습니까? 어떻게 수정해야합니까? (QtCreator는 libgnustl_shared.so의 정적 버전으로 구축 할 수 없으므로 배포를 위해 마지막 버전을 사용해야합니까?)

내 프로젝트는 QtCreator로 컴파일되지만 Qt는 사용하지 않습니다. (저는 Qt를 사용합니다. GUI에서 내 라이브러리를 테스트하지만 라이브러리 자체는 Qt를 전혀 사용하지 않습니다.

답변

4

왜 컴파일 후 파일이 원래 파일보다 작습니까? 링커/컴파일러가 어느 시점에서 파일을 축소합니까 (사용되지 않는 기호 제거)?

예, 공유 라이브러리는 라이브러리 아웃 디렉토리에 설치 한 후 제거됩니다. NDK의 라이브러리는 사용자가 디버깅하지 못하게하기 때문에 사전 스트립되지 않습니다.

또한 r11 이전 버전에는 두 개의 armeabi-v7a 라이브러리가 있습니다. 표시된 폴더와 "엄지"하위 디렉토리에 있습니다. 엄지 손가락 하나만 실제로 사용되었습니다 (r12에서 엄지 손가락 하나가 제거 된 이유).

이러한 충돌은 libgnustl_shared.so와의 불일치로 인해 발생할 수 있습니까?

다른 libkgustl_shared.so 버전 (동일한 NDK 버전이 아닌 경우)입니다. 예, 물론입니다. 둘 다 r11에서 나온 것이고 armeabi-v7a (엄지 손가락 또는 비 엄지 손가락) 인 경우 호환 가능해야합니다. 어느 쪽이든이 라이브러리의 armeabi-v7a-hard 버전을 사용하고 있다면 (r12에서 제거됨), 이것도 확실히 문제입니다.armeabi와 혼합 된 armeabi-v7a는 다소 덜 확실하지만 문제가 될 수 있습니다.

+0

도움을 받으려면 고맙습니다. 당신은 'r11에서 나온 것이고 armeabi-v7a라면 모두 호환이 가능해야합니다.'라고 말하지만, 694ko로 잘라낸 것을 사용한다면, QtCreator는 846ko로 잘라낸 것입니다. 아마도 694ko 중 하나가 누락되었을 것입니다. 내 코드에 필요한 일부 기호는 ...? 그것들은 호환되지 않을 것입니다 ... 원래 파일을 사용하는 것이 안전할까요? (android-ndk-r11b/sources/cxx-stl/gnu-libstdC++/4. 9/libs/armeabi-v7a/l ibgnustl_shared.so는 제거되지 않았습니다). 모든 심볼이 있는지 확인 하시겠습니까? – jpo38