1.下载源码
vim:ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2
ncurses: https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.0.tar.gz
2.解压到项目主目录
$ tar -jxvf ../../../tar/vim-7.4.tar.bz2 vim74/ -C ./
$ tar -zxvf ../../../tar/ncurses-6.0.tar.gz -C ./
3.设置环境变量并编译
3.1.设置临时环境变量
$ export PATH=/opt/ARM/mys-4279/bin:$PATH
3.2.配置vim
./configure --disable-gtktest --disable-gpm --disable-gui --without-x
3.3.编译vim
make CC=arm-linux-gnueabihf-gcc
term.c:33:23: fatal error: termcap.h: 没有那个文件或目录
compilation terminated.
Makefile:2724: recipe for target 'objects/term.o' failed
make: *** [objects/term.o] Error 1
若出现上面的错误是因为vim依赖库libtinfo,libtinfo而已经包含在libncurses的库里面了,所以要先交叉编译ncurses-6.0。
4.交叉编译ncurses
4.1.建立安装目录
$ mkdir ./ncurses-build
4.2.设置临时环境变量
$ export PATH=/opt/ARM/mys-4279/bin:$PATH
$ export CC=arm-linux-gnueabihf-gcc
$ export CXX=arm-linux-gnueabihf-g++
4.3.配置ncurses-6.0
$ ./configure --prefix=/home/chy/work/board/MYS-4379/vim/ncurses-build --with-shared --without-tests --host=arm-linux-gnueabihf
4.4.编译安装
$ make && make install
4.5.建立libtinfo软连接
$ ln -s ./libncurses.so.6.0 ./libtinfo.so.6.0
$ ln -s ./libtinfo.so.6.0 ./libtinfo.so
4.6.重新配置并编译vim
$ make CC=arm-linux-gnueabihf-gcc distclean
$ ./configure --disable-gtktest --disable-gpm --disable-gui --without-x LDFLAGS=-L/home/chy/work/board/MYS-4379/vim/ncurses-build/lib CPPFLAGS=-I/home/chy/work/board/MYS-4379/vim/ncurses-build/include/ncurses
$ make CC=arm-linux-gnueabihf-gcc
4.7.查看vim依赖的库
$ arm-linux-gnueabihf-readelf -a ./vim | grep "共享库"
0x00000001 (NEEDED) 共享库:[libm.so.6]
0x00000001 (NEEDED) 共享库:[libncurses.so.6]
0x00000001 (NEEDED) 共享库:[libdl.so.2]
0x00000001 (NEEDED) 共享库:[libc.so.6]
5.移植到开发板
把4.7 中的库拷贝到开发板的/lib目录下,把vim拷贝到/usr/sbin目录下。可以使用NFS挂载,tftp,重新打包,vsftp等方式。
建立软连接:
# ln /usr/lib32/libncurses.so.6.0 /usr/lib32/libncurses.so.6
# ln /usr/lib32/libncurses.so.6.0 /usr/lib32/libtinfo.so.6.0
# ln /usr/lib32/libtinfo.so.6.0 /usr/lib32/libtinfo.so
运行效果并不理想,在开发板上还是使用vi比较好,因为移植时间关闭了vim的大多特性。