本博客原网址:http://blog.youkuaiyun.com/reille/
1. 7z交叉移植到arm-linux平台
有两种7z命令移植到arm-linux平台:一种是完整功能版本的7z命令移植;另一种精简版本的7z命令的移植(实际上只有解压7z格式包功能),下面分别进行说明。
1.1 完整功能7z命令即7za的移植
解压源码包p7zip_9.20.1_src_all.tar.bz2后,进入源码包,会发现有一个makefile和n多其它平台的makefile:makefile.aix_gcc、makefile.linux_s390x 、makefile.linux_cross_arm等。其中,makefile.linux_cross_arm就是我们要的makefile文件。此我,源码目录中提供了readme文件,其中有说明如下:
According to your OS, copy makefile.linux,
makefile.freebsd, makefile.cygwin, ...
over makefile.machine
其中的 makefile.machine 就是平台相关性选项。所以我们可以这样做 :
编辑makefile.linux_cross_arm文件 ,指定其中的编译器路径,如下打红色地方所示:
#
# makefile for Linux (CROSS ARM)
#
OPTFLAGS=-O
ALLFLAGS=${OPTFLAGS} -pipe -s \
-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
-DNDEBUG -D_REENTRANT -DENV_UNIX \
-D_7ZIP_LARGE_PAGES \
$(LOCAL_FLAGS)
CXX=/usr/local/arm-uclibc/bin/arm-uclibc-g++ $(ALLFLAGS)
CC=/usr/local/arm-uclibc/bin/arm-uclibc-gcc $(ALLFLAGS)
CC_SHARED=-fPIC -DPIC
LINK_SHARED=-fPIC -DPIC -shared
LOCAL_LIBS=-lpthread
LOCAL_LIBS_DLL=$(LOCAL_LIBS) -ldl
OBJ_CRC32=$(OBJ_CRC32_C)
注:用这个编译器,会有一个错误:提示wine_date_and_time.cpp中112行的timegm未定义,可以在config.h的31行,把那个宏定义取消即可正常编译通过。
然后:
$ mv makefile.machine makefile.machine.bak
$ ln -s makefile.linux_cross_arm makefile.machine
$ make
make后,可以bin目录下看到有一个7za的文件,这就是我们要的,把其放到arm板上,即可正常运行。