안 드 로 이 드 에서 htop 과 lsof 를 사용 합 니 다.

3484 단어 linux
안 드 로 이 드 기반 htop-2.0.2 를 컴 파일 하고 사용 하 는 과정 에서(참조 1)프로 세 스 가 파일 핸들(단축 키'l',실제 호출 명령 lsof)정 보 를 사용 하 는 것 이 공백 상태 인 것 을 발견 했다.연구 결과 에 따 르 면 안 드 로 이 드 의 lsof 는 toolbox 에 포 함 된 하위 기능 으로 명령 행 인 자 를 지원 하지 않 고 현재 원본 코드 생 성 프로그램 을 따로 컴 파일 하여 htop 호출 을 제공 하 는 것 으로 나 타 났 다.
1.컴 파일 방식
1.안 드 로 이 드 프레임 워 크 에서 컴 파일
github 에 프로젝트(인용 2)가 있 습 니 다.4.86 lollipop 에서 의 프로젝트 를 바탕 으로 너무 많은 설명 을 하지 않 습 니 다.
2.ndk(r10e,api 21)를 사용 하여 컴 파일
(1)소스 코드 를 먼저 다운로드(참조 3),현재 최신 버 전 은 4.89
(2)컴 파일 스 크 립 트 설정
export PATH=/home/test/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH

SYSROOT=/home/test/android-ndk-r10e/platforms/android-21/arch-arm/

export LSOF_CC="arm-linux-androideabi-gcc --sysroot=$SYSROOT"
export LSOF_HOST=arm-linux-androideabi
export LSOF_CFGF='-O -DHAS_STRFTIME -DHASNORPC_H -DGLIBCV'

./Configure -n linux

make
더 많은 설정 매개 변 수 는 00XCONFIG 파일 에서 설명 할 수 있 습 니 다.
(3)컴 파일 오류 수정
a) lsof.h:229:12: error: conflicting types for '__errno'
lsof.h 의 229 줄 을 찾 아"extern int errno"를 차단 합 니 다.
b) misc.o:misc.c:function safestrprt: error: undefined reference to 'mblen'
machine.h 의 458 줄 을 찾 아 차단 합 니 다.\#define HASWIDECHAR    1"
(4)실행 오류 수정
실행 중 오류"PIE(position independent executables)만 지 원 됩 니 다."
컴 파일 스 크 립 트 LSOFCC 는"arm-linux-androideabi-gcc--sysroot=$SYSROOT-fpIE-pie"로 수정 되 었 습 니 다.
(5)정적 링크 버 전 생 성
lsof 설정 은 동적 링크 방식 만 지원 하지만 비 PIE 방식(위의 4 시 건 너 뛰 기)으로 컴 파일 이 성공 한 전제 에서 다음 명령 을 실행 하면 정적 링크 버 전 을 생 성 할 수 있 습 니 다(4 참조).
$LSOF_CC -o lsof -static dfile.o dmnt.o dnode.o dproc.o dsock.o dstore.o arg.o main.o misc.o node.o print.o proc.o store.o usage.o util.o -L./lib -llsof
2.htop-2.0.2 와 ncurses-6.0 의 컴 파일 스 크 립 트 를 첨부 합 니 다.
1、htop
export PATH=/home/test/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH

SYSROOT=/home/test/android-ndk-r10e/platforms/android-21/arch-arm/

./configure \
  CC=arm-linux-androideabi-gcc \
  --prefix=$PWD/system \
  --bindir=$PWD/system/bin \
  CFLAGS=" -I$PWD/../ncurses-6.0/system/include -I$PWD/../ncurses-6.0/system/include/ncurses --sysroot=$SYSROOT -fPIE -pie" \
  LDFLAGS=" -L$PWD/../ncurses-6.0/system/lib" \
  --host=arm-linux-androideabi \
  --disable-unicode

make

make install

2、ncurses
export PATH=/home/test/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH

SYSROOT=/home/test/android-ndk-r10e/platforms/android-21/arch-arm/

./configure \
  CC=arm-linux-androideabi-gcc \
  --prefix=$PWD/system \
  CFLAGS=" -I../ncurses -I../progs --sysroot=$SYSROOT" \
  --host=arm-linux-androideabi \
  --with-shared \

make

make install

3.화제 확장
        ndk 를 사용 하여 교차 컴 파일(ndk-build 방식 이 아 닌)을 할 때 컴 파일 스 크 립 트 를 써 야 합 니 다.이것 은 일정한 중복 작업(예 를 들 어 ndk 경로,sysroot 파라미터,컴 파일 러 설정 등)이 있 습 니 다.누군가가 이 중복 작업 을 컴 파일 도구(참조 5)로 통합 한 것 을 발 견 했 습 니 다.프로젝트 디 렉 터 리 에서 도구 스 크 립 트 를 실행 하면 초기 설정 작업 을 완성 할 수 있 습 니 다.
4.관련 인용
1、http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29570002&id=5746172
2、https://github.com/cfig/android_tools
3、http://archive.ubuntu.com/ubuntu/pool/main/l/lsof/
4、http://blog.lilydjwg.me/2014/3/8/lsof-for-android-compiled.43363.html
5、https://z3ntu.github.io/2015/12/12/Cross-compiling-native-linux-applications-for-android.html

좋은 웹페이지 즐겨찾기