5

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

但是,这会导致错误。在文件 zconf.h 中包含文件 sys/types.h。

虽然此文件位于标准的 Visual Studio 包含目录中,但 windows mobile sdk 附带的文件夹 ce/include 中没有 sys 子文件夹,并且这里没有 types.h 文件。

因此, zlb 无法编译。

那应该如何解决?

更新:包含本身在#if 块中。再具体一点:

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

这就引出了另一个问题。Z_SOLO 宏是什么意思?它散落在#ifdef 中,就像在 zlib 中一样,但是搜索它并没有给出关于应该是什么的线索。顺便说一句,它没有定义。

4

3 回答 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 与头文件一起使用。)

于 2012-10-17T13:51:46.990 回答
1

您可以直接获取源代码,包括我在 CodePlex 中发布的 Studio 项目文件。

于 2012-10-17T14:07:33.747 回答
0

定义 Z_SOLO 并从项目中排除所有 gz 文件允许它正确编译。

gz (gzguts.h, gzread.c etcetera) 文件包括 fcntl.h,它也不存在于 ce nclude 文件夹中,这就是他们必须去的原因。

于 2012-10-17T10:34:32.033 回答