在SylixOS网站的百科页面有“Zlib移植指南”根据指南的说明,可以方便的进行zlib库的移植和安装。
除上述方法外,还能够在RealCoder下编译zlib库,从网站http://www.zlib.net/ 下载zlib source code,这里使用的是tar.xz格式(其他格式应该也可以,没有验证)。下载后的文件名为zlib-1.2.8.tar.xz,使用普通的rar解压软件解压到当前文件即可。解压后的文件所在文件夹名称为zlib-1.2.8。
进入zlib-1.2.8文件夹,打开/watcom/watcom_l.mak文件,感觉此文件比较像makefile。在此文件里面会看到这样一些语句:
C_SOURCE = adler32.c compress.c crc32.c deflate.c & gzclose.c gzlib.c gzread.c gzwrite.c & infback.c inffast.c inflate.c inftrees.c & trees.c uncompr.c zutil.c
上述语句中包含的**.c文件应该就是实现zlib库压缩功能的文件。将zlib-1.2.8文件夹下中同名的**.c文件单独拷贝到一个文件夹zlib,并将相关的**.h文件也一并拷贝到相同目录下。
打开RealCoder,建立一个“SylixOS Shared Lib”工程,此处命名为zlib_dll,将上一步骤中zlib文件夹下的**.c和**.h文件均拷贝到工程zlib_dll的目录下,并将自动生成的zlib_dll.c文件删除。
修改zlib_dll工程的Makefile,将SRCS修改如下:
#******************************************************************************# src(s) file#******************************************************************************SRCS = adler32.c compress.c crc32.c deflate.c gzclose.c gzlib.c gzread.c gzwrite.c infback.c inffast.c inflate.c inftrees.c trees.c uncompr.c zutil.c
会发现这里的SRCS与watcom_l.mak文件下的C_SOURCE相同。修改target输出如下
#******************************************************************************# target#******************************************************************************LIB = $(OUTPATH)/libzlib.aDLL = $(OUTPATH)/libzlib.so
其实这里也可以不更改,默认libzlib_dll.so文件也可以使用,只是不习惯。
上述步骤完成后,右键选择“Build Project”,编译成功后会在Debug目录下生成target中定义的两个文件。自此我们已经完成zlib库在SylixOS下编译移植。
/*********************zlib库的验证***********************/
新建“SylixOS App”工程,将生成的main函数更改如下:
#include#include int main(){ /* 原始数据 */ unsigned char strSrc[] = "hello world! aaaaa bbbbb ccccc ddddd 1234567890 notrecongen yes"; unsigned char buf[1024] = {0}; unsigned char strDst[1024] = {0}; unsigned long srcLen = sizeof(strSrc); unsigned long bufLen = sizeof(buf); unsigned long dstLen = sizeof(strDst); printf("Src string:%snLength:%ldn", strSrc, srcLen); /* 压缩 */ compress(buf, &bufLen, strSrc, srcLen); printf("After Compressed Length:%ldn", bufLen); /* 解压缩 */ uncompress(strDst, &dstLen, buf, bufLen); printf("After UnCompressed Length:%ldn",dstLen); printf("UnCompressed String:%sn",strDst); return 0;}
修改makefile,在include path下添加头文件包含路径,修改后如下:
INCDIR = -I"$(SYLIXOS_BASE_PATH)/libsylixos/SylixOS"INCDIR += -I"$(SYLIXOS_BASE_PATH)/libsylixos/SylixOS/include"INCDIR += -I"$(SYLIXOS_BASE_PATH)/libsylixos/SylixOS/include/inet"INCDIR += -I"../zlib_dll"
在动态链接库下添加需要的zlib库文件名称和目录
#******************************************************************************# depend dynamic library#******************************************************************************DEPEND_DLL = -lvpmpdmDEPEND_DLL += -lzlib#******************************************************************************# depend dynamic library search path#******************************************************************************DEPEND_DLL_PATH = -L"$(SYLIXOS_BASE_PATH)/libsylixos/$(OUTDIR)"DEPEND_DLL_PATH += -L"../zlib_dll/Debug"
这里需要注意动态库名称的填写,在zlib_dll工程中生成的文件是libzlib.so文件,在填写的时候头尾都去除了,并添加了-l。编译zlib_demo工程。
使用FTP工具或者使用RealCoder里面的Upload工具,可以ibzlib.so文件上传到SylixOS设备中的/lib目录,zlib_demo/apps/zlib_demo目录下,执行程序,会输出程序运行结果。说明运行成功。