2012-02-06 3 views
1

Android ADB 쉘에서 실행하려는 C++ 유틸리티 프로그램을 이식하려고합니다. 그런데, 나는 안드로이드 NDK의 makestandalone-toolchain.sh 스크립트를 사용하고 그것으로 내 프로그램을 컴파일하고있다. . 나는이가 c_str 기능이 NDK에 있도록하면 libstdC++에 존재하지 않는다는 것을 의미 것을보고, 몇 가지 조사 후Android adb 쉘 원시 프로그램에서 stl 사용

reloc_library[1315]: 16304 cannot locate '_ZNKSs5c_strEv'... 
CANNOT LINK EXECUTABLE 

: 나는 그것을 실행하려고하면 불행하게도,이 오류가 발생합니다. 나는 또한 stlport.so에서 심볼을 찾을 수 없었고 실제로는 C++ 라이브러리의 ./sources/cxx-stl/gnu-libstdc++/libs/ 버전에서만 심볼을 발견했다. 이 라이브러리는 내가 만든 독립 실행 형 툴체인에 포함되어 있지 않으며 장치에서도 찾을 수 없습니다 (장치가 Honeycomb를 실행 중입니다).

NDK의 텍스트에는 stlport를 사용할 때 전체 STL에 대한 지원이 명확히 나와 있습니다. 이것은 아이스크림 샌드위치에서만 사실입니까? libstlport.so 또는 libsupC++. so에서 장치와 NDK에는 찾지 못한 것과 같은 서명이 없습니다.

  1. 뭔가 거기에 내가 빌드 과정에서 누락/안드로이드 설정 :

    그래서 제 질문은 두 부분으로? 프로그램을 gnu-libstC++없이 컴파일 할 수 있도록, 또는 적어도 장치에로드하지 않고 컴파일/링크 오류로 실패 할 수 있도록 설정을 다르게 할 수 있습니까?

  2. gnu-libstC++로 링크하는 것이 유일한 방법 인 경우 어떻게해야합니까? 나는 그것에 정적으로 링크를 관리 할 수 ​​있다고 생각하지만 차라리하지 않을 것이다. 다른 사람이 해결책을 찾고 있다면

가 어떻게 내

+0

정적 stlport 또는 정적 gnustl과 같은 다른 STL 구현을 선택하려면 Application.mk 파일에서 APP_STL 변수를 사용하십시오 (docs/CPLUSPLUS-SUPPORT.html 파일 읽기). –

+0

불행하게도 독립 실행 형 툴체인을 사용하고 일반적으로 액티비티를 컴파일하는 것이 아니기 때문에 내가 할 수는 없지만 adb 쉘 (ps 또는 cp와 유사)에서 실행할 계획 인 리눅스 프로그램 – nitzanms

+0

그런 다음 ndk-build가 STL 구현을 선택하는 방법 (특정 CFLAGS와 LDFLAGS를 선택하는 방법)을 검토합니다. 독립 실행 형 툴체인에 대해 동일한 컴파일러 및 링커 플래그를 선택하면 정적 STL 라이브러리를 선택할 수 있습니다. –

답변

0

에 GNU-된 libstdC++ 버전을 추가 할 수 있습니다, 나는 libgnustl_shared.so에 -l 스위치를 사용하여 종속성을 추가 끝났다. 당신은 내가 다음 장치에 프로그램과 .so를 함께이 기선을 제압 당했지만, LD_LIBRARY_PATH에 현재 디렉토리를 추가하는 스크립트를 만들어

sources/cxx-stl/gnu-libstdc++/libs/&ltarchitecture>/

에서 NDK 내부에서 찾을 수 있습니다. make 스크립트를 사용하여 gnustl에 의존하는 프로그램을 만들 때 NDK가 수행하는 것과 비슷합니다.