在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.a
DLL = $(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:%s\nLength:%ld\n", strSrc, srcLen);
/* 压缩 */
compress(buf, &bufLen, strSrc, srcLen);
printf("After Compressed Length:%ld\n", bufLen);
/* 解压缩 */
uncompress(strDst, &dstLen, buf, bufLen);
printf("After UnCompressed Length:%ld\n",dstLen);
printf("UnCompressed String:%s\n",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 = -lvpmpdm
DEPEND_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目录下,执行程序,会输出程序运行结果。说明运行成功。