在編譯並使用基於android的htop-2.0.2過程中(引用一),發現檢視程序使用檔案控制代碼(快捷鍵'l',實際呼叫命令lsof)資訊一直為空白,經研究發現原來android的lsof其實是包含在toolbox中的子功能,其功能很單一不支援命令列引數,現單獨編譯源**生成程式供htop呼叫。
一、編譯方式
1、在android框架中編譯
在github上有專案(引用二),是基於4.86在lollipop下的工程,不做過多解釋
2、使用ndk(r10e、api21)進行編譯
(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) 修改執行錯誤
執行時錯誤"only position independent executables (pie) are supported."
將編譯指令碼lsof_cc修改為"arm-linux-androideabi-gcc --sysroot=$sysroot -fpie -pie"
(5) 生成靜態鏈結版本
lsof的配置只支援動態鏈結方式,但可以在按非pie方式(跳過上面第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
二、附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
三、擴充套件話題
在使用ndk進行交叉編譯(非ndk-build方式)的時候需要寫編譯指令碼,這個有一定的重複工作(如ndk路徑、sysroot引數、編譯器配置等等)。發現有人已經把這個重複工作整合成編譯工具(引用五),只需要在工程目錄下執行工具指令碼即可完成前期配置工作。
四、相關引用
1、2、
3、4、
Linux Centos下安裝htop使用htop
top和top都是管理程序的,但是htop是top的加強版,增加了好多功能。1.安裝htop wget tar zxf htop configure make make install 其中需要說明的一點是,htop需要ncurses,所以在安裝之前先安裝ncurses,ncurses的安裝方法與h...
Linux下htop的使用
第1行 第4行 顯示cpu當前的執行負載,有幾核就有幾行,我的是4核 mem 顯示記憶體的使用情況,3887m大概是3.8g,此時的mem不包含buffers和cached的記憶體,所以和free m會不同 swp 顯示交換空間的使用情況,交換空間是當記憶體不夠和其中有一些長期不用的資料時,ubun...
HTOP使用方法
可以使用命令 apt get install htop 來安裝 htop,安裝完成之後,鍵入 htop 命令,開啟htop。互動命令用上檔鍵shift。常用命令,shift m 按照記憶體大小排序。shift h 收縮執行緒。q 退出 下面是 f1 f10 的功能和對應的字母快捷鍵。命令列選項 co...