2011-09-24 2 views
2

내 공유 객체를 빌드하는 데 최신 Android NDK r6b를 사용하고 있습니다. 이 라이브러리는 어떤 종류의 STL도 사용하지 않지만 결과적으로 .so는 std :: bad_alloc_what (void)와 같은 많은 STL 항목을 포함하며 바이너리 크기를 크게 늘립니다. 또한 릴리스 빌드에는이 가비지가 포함됩니다. APP_STL은 어디에도 정의되어 있지 않으며 NDK r5b는 사용 된 함수로만 작은 바이너리를 생성합니다. 그것은 r6b의 버그입니까? STL을 사용하지 않고 r6b로 어떻게 구축 할 수 있습니까?STL없이 Android NDK .so를 작성하는 방법은 무엇입니까?

+0

하지만 우리는 사실과 살고 있습니다 :

자세한 내용은이 질문을 참조 http://code.google.com/p/android/issues/detail?id=19881 –

답변

0

new을 사용하는 경우 std::bad_alloc 예외에 대해 암시 적으로 표준 라이브러리를 사용하고 있습니다. new의 no-throw 버전을 호출하지 않는 한 std::nothrow을 대신 사용합니다. 표준 라이브러리를 사용하지 않으면 링크되지 않습니다. 그게 네가 원한다면 네가하지 않았는지, 아니면 그냥 C로 옮기 겠어?

+0

I 제가 말했듯이, r5b는 STL을 참조하지 않고 라이브러리를 빌드하기 때문에 어디서나 STL을 사용하지 않습니다. – trashkalmar

+0

@trashkalmar : 따라서 코드 전체에서 직접 또는 간접적으로'new'를 사용하지 않습니까? 어떤 경우에 r6b가 빌드되어 예외가 활성화되고 r5b가 활성화되지 않았습니까? –

+0

물론, 나는'new'를 여러 번 사용하고 있습니다. r6b가 예외를 켰는 지 어떻게 알 수 있습니까? 그리고 그들을 명시 적으로 비활성화하는 방법은 무엇입니까? 내가 아는 한 Android 런타임은 C++ 코드에서 예외를 지원하지 않습니다. – trashkalmar