原创 SylixOS下Zlib的移植和使用

2015-6-28 14:20 753 19 19 分类: 消费电子

  在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

 会发现这里的SRCSwatcom_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目录下,执行程序,会输出程序运行结果。说明运行成功。

文章评论0条评论)

登录后参与讨论
我要评论
0
19
关闭 站长推荐上一条 /2 下一条