一、htop依赖ncurses,所以先编译ncurses
Index of /pub/gnu/ncurses
http://ftp.gnu.org/pub/gnu/ncurses/
从上方链接中下载源码并进入下载目录,执行提前准备好的build.sh脚本
#!/bin/sh
HOST=arm-linux-gnueabihf
DIR=$PWD/install
CC=/opt/a1000/toolchain/app/ext-toolchain/bin/arm-linux-gnueabihf-gcc
if [ ! -d ${DIR} ]; then
mkdir -p ${DIR}
fi
./configure CC=${CC} --prefix=${DIR} --host=${HOST} --without-cxx --without-cxx-binding --without-ada --without-manpages --without-progs --without-tests --with-shared \
--with-terminfo-dirs="/etc/terminfo:/lib/terminfo:/usr/share/terminfo"
if [ $? -eq 0 ]; then
sed -i "s/extern NCURSES_EXPORT(bool) mouse_trafo (int\*, int\*, bool);.*/extern NCURSES_EXPORT(bool) mouse_trafo (int\*, int\*, bool);/" include/curses.h
make && make install
fi
执行完成后会在install/lib目录下生成库文件,进入该目录并执行下面的命令(我的环境不执行的话编译htop会报错,说找不到libncurses)
ln -s libtinfo.so.5 libtinfo.so
ln -s libncurses.so.5 libtinfo.so.5
到这一步ncurses的编译就完成了
二、编译htop
https://github.com/hishamhm/htophttps://github.com/hishamhm/htop从上方github链接中clone下载源码并进入下载目录
运行 autogen.sh 生成 configure后执行提前准备好的build.sh脚本
#!/bin/sh
HOST=arm-linux-gnueabihf
DIR=$PWD/install
CC=/opt/a1000/toolchain/app/ext-toolchain/bin/arm-linux-gnueabihf-gcc
AR=/opt/a1000/toolchain/app/ext-toolchain/bin/arm-linux-gnueabihf-ar
RANLIB=/opt/a1000/toolchain/app/ext-toolchain/bin/arm-linux-gnueabihf-ranlib
STRIP=/opt/a1000/toolchain/app/ext-toolchain/bin/arm-linux-gnueabihf-strip
if [ ! -d ${DIR} ]; then
mkdir -p ${DIR}
else
rm -rf install/*
fi
./configure \
--host=${HOST} \
--prefix=${DIR} \
CC=${CC} \
AR=${AR} \
RANLIB=${RANLIB} \
--disable-unicode \
LDFLAGS=-L/home/ylkuai/project/ncurses-5.9/install/lib \
CPPFLAGS=-I/home/ylkuai/project/ncurses-5.9/install/include
if [ $? -eq 0 ]; then
make && make install
${STRIP} install/bin/htop
fi
执行完成后会在install/bin目录下生成htop,到这一步htop就编译完成了
三、使用htop
将htop下载到开发板的/var/bin目录下,给予可执行权限后运行htop不报错就成功了
(编译ncurses时生成的库文件也要放到开发板的lib目录中)
可能会报错:Error opening terminal: vt102.
报错原因:在htop的指定terminfo目录下没有找到vt102这个玩意
解决方法:在编译ncurses的过程中有加入这个命令,这就是应该存在的几个terminfo目录
--with-terminfo-dirs="/etc/terminfo:/lib/terminfo:/usr/share/terminfo"
可以在开发板中执行下面的命令,并把编译ncurses过程中生成的vt102(install/share/terminfo/v/vt102)放入v目录下即可
mkdir -p /etc/terminfo/v