热度 19
2015-6-28 14:20
756 次阅读|
0 个评论
在 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 = {0}; unsigned char strDst = {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 目录下,执行程序,会输出程序运行结果。 说明运行成功。