为 Windows Mobile 6 编译 zlib

5

我正在尝试在Visual Studio 2008中为Windows Mobile编译zlib。

然而,这导致了一个错误。在文件zconf.h中包含了文件sys/types.h。

虽然这个文件在标准的Visual Studio包含目录中,但是随着Windows Mobile SDK一起提供的文件夹ce/include中没有sys子文件夹,并且这里也没有types.h文件。

因此,zlib无法编译。

应该如何解决这个问题?

更新:include本身在#if块中。具体来说:

#ifdef STDC
#  ifndef Z_SOLO
#    include <sys/types.h>      /* for off_t */
#  endif
#endif

那就引出了另一个问题:Z_SOLO宏的含义是什么?在zlib中,它到处都是#ifdef和类似的东西,但搜索它并没有给出任何关于它应该是什么的线索。顺便提一下,它并没有被定义。


创建您自己的sys/types.h头文件,包含适当的定义,并更新您的包含路径以找到它。 - simonc
当然可以。不过我建议你把它写在答案部分,这样如果它有效的话,我就可以接受它。 - Srv19
3个回答

8
Z_SOLO 是用于在没有使用任何外部库的情况下编译和使用 zlib 的工具,适用于嵌入式环境。其中不包括 gz* 函数以及其他依赖于内存分配的函数(如 compress()uncompress())。必须提供基本的 zlib 初始化函数(例如 deflateInit())来进行内存分配。这将避免您在 Windows Mobile 上遇到标准 C 库头文件和函数缺失的所有问题。
要使用 Z_SOLO,您需要编辑 zconf.h 文件,在开头附近添加 #define Z_SOLO。然后编译 zlib 并使用已编辑的 zconf.h。如果仅使用 Z_SOLO 进行编译,但不编辑 zconf.h,则在尝试使用已编译的 zlib 与头文件一起使用时会出现错误。

工作得非常好。我也在#ifdef(UNDER_CE)中加入了Z_SOLO定义。 - Srv19

1

0

定义Z_SOLO并将所有gz文件从项目中排除可以使其正确编译。

gz(例如gzguts.h,gzread.c等)文件包括fcntl.h,而ce包含文件夹中也没有此文件,这就是为什么它们必须被排除的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接