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에는 찾지 못한 것과 같은 서명이 없습니다.
- 뭔가 거기에 내가 빌드 과정에서 누락/안드로이드 설정 :
그래서 제 질문은 두 부분으로? 프로그램을 gnu-libstC++없이 컴파일 할 수 있도록, 또는 적어도 장치에로드하지 않고 컴파일/링크 오류로 실패 할 수 있도록 설정을 다르게 할 수 있습니까?
- gnu-libstC++로 링크하는 것이 유일한 방법 인 경우 어떻게해야합니까? 나는 그것에 정적으로 링크를 관리 할 수 있다고 생각하지만 차라리하지 않을 것이다. 다른 사람이 해결책을 찾고 있다면
가 어떻게 내
정적 stlport 또는 정적 gnustl과 같은 다른 STL 구현을 선택하려면 Application.mk 파일에서 APP_STL 변수를 사용하십시오 (docs/CPLUSPLUS-SUPPORT.html 파일 읽기). –
불행하게도 독립 실행 형 툴체인을 사용하고 일반적으로 액티비티를 컴파일하는 것이 아니기 때문에 내가 할 수는 없지만 adb 쉘 (ps 또는 cp와 유사)에서 실행할 계획 인 리눅스 프로그램 – nitzanms
그런 다음 ndk-build가 STL 구현을 선택하는 방법 (특정 CFLAGS와 LDFLAGS를 선택하는 방법)을 검토합니다. 독립 실행 형 툴체인에 대해 동일한 컴파일러 및 링커 플래그를 선택하면 정적 STL 라이브러리를 선택할 수 있습니다. –