문제

저는 Android NDK와 함께 일하고 있으며 현재 STL을 지원하지 않기 때문에이 작업에 성공한 훌륭한 사람들이 있는지 또는 Android 플랫폼에 더 적합한 사람이 있는지 궁금합니다 : USTL 또는 stlport.

편집 : 다른 옵션이있을 수 있습니다 Crystax .net.

그들의 웹 사이트에서 :

... 공식 출처에서 재건 한 Android NDK R3의 맞춤형 배포. C ++ 예외 지원, RTTI 및 표준 C ++ 라이브러리가 추가되었습니다.

도움이 되었습니까?

해결책

STLPORT는 Android2.3 이후 지원되었습니다 !!!

다른 팁

STL의 포트는 공식적으로 있습니다 버전 R5의 Android NDK에서 사용할 수 있습니다 에. 정적 또는 공유 라이브러리로 사용할 수 있습니다. 다음 구현은 NDK와 함께 미리 빌드 할 수 있습니다.

  • stlport, v5.2.0 기반 :
    • 공전 stlport_static : 프로젝트에 동적 라이브러리가 하나만있는 경우 사용하십시오.
    • 동적 stlport_shared : 프로젝트에 하나 이상의 동적 라이브러리가있는 경우 사용합니다.
  • gnu libstdc ++ system (정적 라이브러리)

권장하고 쉬운 사용 방법 빌드 시점에서는 Application.mk에서 app_stl을 정의하는 것입니다.

APP_STL := stlport_static

그리고 당신이 그것을 재건하고 싶다면 (이것은 ~ 아니다 필요한), application.mk에서 stlport_force_rebuild를 정의하십시오.

STLPORT_FORCE_REBUILD := true

STLPORT의 단위 테스트 프레임 워크도 제공됩니다.

stlport의 현재 제한 :

  • C ++ 예외는 지원되지 않습니다
  • RTTI는 지원되지 않습니다
  • 지원하는 "가능한 버그" wchar_t 그리고 로케일

다양한 링크 :

문서화는 다음 위치의 NDK 패키지로 제공됩니다 (더있을 수 있음).

  • docscplusplus-support.html
  • 소스/cxx-stl/stlport
  • 소스/CXX-STL/GNU-LIBSTDC ++

ndk + docs를 다운로드하십시오 여기 ; 파일 버그 여기


아래는 DOCS/CPLUSPLUS-SUPPORT.HTML (NDK DOCS, R5)에서 발췌 한 내용입니다.

III. C ++ 표준 라이브러리 구현 선택 :

기본적으로 최소 C ++ 런타임 시스템 라이브러리 (/system/lib/libstdc+.so) 용 헤더 및 라이브러리는 C ++ 소스를 구축 할 때 사용됩니다.

그러나 변수 app_stl을 응용 프로그램의 다른 것으로 설정하여 다른 구현을 선택할 수 있습니다.

app_stl : = stlport_static

이 NDK와 함께 제공되는 정적 stlport 구현을 선택합니다. 값 app_stl 값은 다음과 같습니다.

시스템 -> 기본 최소 C ++ 런타임 라이브러리를 사용하십시오. stlport_static-> stlport를 정적 라이브러리로 만들었습니다. stlport_shared-> 공유 라이브러리로 구축 된 stlport를 사용하십시오.

경고 : 중요한 경고

 AT THE MOMENT, OUR STLPORT IMPLEMENTATION DOES NOT SUPPORT EXCEPTIONS
 AND RTTI. PLEASE BE SURE TO NOT USE -fexceptions OR -frtti IN ALL
 MODULES THAT USE IT.

경고 : 중요한 경고의 끝

"stlport_shared"는 프로젝트에 C ++ STL을 사용하는 여러 공유 라이브러리가 있으면 선호됩니다. 함수의 복제와 더 중요한 글로벌 변수 (예 : std :: cout)가 그들 각각에있어서 놀라운 결과를 얻을 수 있기 때문입니다. .

반면에 다음 예에서와 같이 응용 프로그램을 시작할 때 설명 할 때 설명 할 때 설명해야합니다.

 static {
     System.loadLibrary("stlport_shared");
     System.loadLibrary("foo");
     System.loadLibrary("bar");
 }

"libfoo.so"와 "libbar.so"는 "libstlport_shared.so"에 의존하는 곳입니다.

"libstlport_shared.so"인 경우 공유 라이브러리 이름은 시스템 수준 LibStlport.s를 포함하는 특정 Android 시스템 이미지와의 명명이 충돌하지 않도록합니다 (이는 abi 안정성이 아니며 NDK 생성 기계 코드에서 사용할 수 없음). .

프로젝트에 공유 라이브러리가 하나만 있으면 "stlport_static"이 선호됩니다. 실제로 필요한 STL 기능 및 변수 만 시스템 코드에 연결되어 코드 크기를 줄이며 동적 stlport_shared를로드 할 필요가 없습니다. 스타트 업.

IV. STLPORT 관련 문제 :

이 NDK는 STLPORT를 위해 미리 빌드 된 정적 및 공유 라이브러리를 제공하지만, 구축하기 전에 환경 또는 응용 프로그램에서 다음을 정의하여 소스에서 재건축 할 수 있습니다.

STLPORT_FORCE_REBUILD := true

STLPORT는 BSD 스타일의 오픈 소스 라이센스에 따라 라이센스가 부여됩니다. 라이브러리에 대한 자세한 내용은 소스/cxx-stl/stlport/readme를 참조하십시오.

V. 미래 계획 :

  • C ++ 예외 및 RTTI와 Stlport를 호환시킵니다
  • 완전한 GNU LIBSTDC ++ 지원
  • USTL 지원?

USTL은 표준에서 상당히 벗어난다는 점에 유의하십시오. 예를 들어, std :: string에 대한 UTF-8 인코딩을 가정합니다. 그래도 여전히 흥미로워 보입니다 ...

나는 최근에 일부를 만났다 도우미 스크립트 및 Android 용 STLPORT 포트, John Ripley.

관련도 있습니다 설정 방법에 대한 지침이 포함 된 블로그 게시물.

Stlport와 쉽게 갈 수 있다고 생각합니다.

이것이 제가 Android Froyo와 협력하도록 stlport를 구성한 방법입니다.

// The code
// The set of definitions and includes for STLPort
// They used defined() instead of #ifdef.
#define _STLP_HAS_INCLUDE_NEXT  1
#define _STLP_USE_MALLOC   1
#define _STLP_USE_NO_IOSTREAMS  1
#include <stl/config/_android.h>
#include <map>
#include <string>

// Android.mk
# For Android STL support
LOCAL_C_INCLUDES += external/stlport/stlport
LOCAL_SHARED_LIBRARIES += libstlport

앤드류

Stjepan Rajko의 답변의 링크에서 GIT 저장소 언급은 더 이상 존재하지 않습니다. 대체 출처가 켜져 있습니다 anddev git, git : //stlport.git.sourceforge.net/gitroot/stlport/stlport. 나는 후자를 찾았다 더 긴 토론 Android에서 stlport와 Boost를 모두 사용합니다.

이 질문에 처음 대답 한 이후, 나는 문제가있는 shared_ptr을 포함하여 부스트라고 부르는 내 라이브러리와 함께 일하기 위해 anddev stlport를 얻었습니다. 내 솔루션에 대한 자세한 내용은 참조하십시오 이 질문.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top