2010-09-09 3 views
7

Android NDK r4에서 "ndk-gdb"디버그 도구에 대해 배웠습니다. 이제 hello-jni 샘플 디버깅을 시작할 수 있습니다 (문제가 있음에도 불구하고).여러 개의 lib가있는 ndk-gdb

그러나 내 안드로이드 응용 프로그램의 경우 많은 수의 c/C++ 파일을 사용하여 몇 가지 libs를 사용할 수 있습니다. 나는이 파일을 ndk-build로 빌드 한 다음, $ PROJECT/libs 디렉토리 아래에이 파일들을 복사했다. 그리고 디버깅없이 잘 동작한다. 하지만 지금은 ndk-gdb로 lib를 디버깅하고 싶습니다. ndk-gdb를 시작할 때 심볼 테이블이로드되지 않는다고 불평합니다.

또한이 모든 파일을 $ PROJECT/bin/ndk/local/armeabi에 복사합니다 (gdb가 기호 테이블을로드하려고 시도하는 기본 디렉토리처럼 보입니다). 그리고 여전히, 그것은 작동하지 않습니다.

아마 내가 복사 한 후 ndk-gdb가 나의 파일을 추적 할 수 없습니까? 또는 $ PROJECT/bin/ndk/local/armeabi 아래에 복사 한 후에도 심볼 테이블을로드 할 수없는 이유는 무엇입니까?

전에이 문제를 만난 사람이 있습니까?

고맙습니다.

답변

10

잘못된 폴더에 복사하는 것 같습니다. 이전 NDK는 파일을 bin 폴더에 복사했습니다. 새로운 하나는 obj 폴더에 그것들을 복사하고, 그것은 심볼을 찾기 위해 gdb가 가리키는 곳이다.

또한 pre-stripped .so 파일을 libs 폴더에 복사 한 파일이 아니라 obj 폴더에 복사해야합니다. 빌드 프로세스의 일부로 libs 폴더의 파일에 기호 및 디버깅 정보가 제거되었습니다. 따라서 각 .so 파일의 사본 두 개를 보관해야합니다. 하나는 Android 기기에 설치할 libs 폴더에서, 다른 하나는 obj 폴더에서 심볼을 가져올 GDB 용으로 설치하는 것입니다.

디버그 파일을 앱 트리의 obj 폴더에 복사하는 대신 gdb의 심볼 검색 경로에 다른 빌드 디렉토리 obj/폴더를 추가 할 수 있습니다. ndk-build는 으로 시작하는 줄을 포함하는 파일 gdb.setup을 설정합니다. solib-search-path는입니다. 모든 대상 obj/local/whatever 폴더를 포함하는 콜론으로 구분 된 경로를 그 행에 넣을 수 있습니다. 그러면 gdb가 심볼을 찾습니다.

+0

답장을 보내 주셔서 감사합니다. 내일 당신의 해결책을 시도 할 것입니다. 그리고 NDK의 내부 빌드 프로세스에 대한 더 많은 문서를 제공 할 수 있습니까? "벗겨진 것"과 같은 것, 나는 들어 본 적이 없다. – MaratSafinWang

+1

Unix 명령 "strip"을 참조하십시오. http://unixhelp.ed.ac.uk/CGI/man-cgi?strip - 직장에서 Google에 "man strip"을 입력하는 경우주의하십시오. 첫 번째 링크에 놀랐습니다. :) – SomeCallMeTim

+0

빌드 프로세스의 다른 단계는 NDK 패키지의 docs/OVERVIEW.TXT에 문서화되어 있습니다. "마지막 단계에서는 성공한 경우 응용 프로그램에서 응용 프로그램의 루트 프로젝트에 필요한 공유 라이브러리를 제거합니다 예배 규칙서." – SomeCallMeTim