无法打开包含文件:“unistd.h”:没有那个文件或目录。

42
安装了libpng库后,我在Windows 7 SP1平台上使用Visual Studio Ultimate 2013,并使用 #include <png.h> 将其包含到我的项目中。但在编译时,出现以下错误:
C1083: 无法打开包括文件: 'unistd.h': 没有那个文件或目录
请问如何解决这个问题?我在网上还没有找到任何解决方案。

2
我最终按照这个建议进行了操作。 - user3471387
我从未在使用Visual Studio构建libpng时遇到过问题。很可能在特定于平台的部分周围有一个#ifdef,您只需要提供正确的定义来选择正确的平台即可。 - Retired Ninja
@RetiredNinja,感谢您的回复,libpng是否允许将位图转换为PNG? - user3471387
好的,它并不叫做lippngandbmp,所以不能直接这样做。如果你在内存中有一个bmp文件,使用libpng将其写成png文件并不困难。 - Retired Ninja
3个回答

46

"unistd" 中的 "uni" 代表 "UNIX" - 在 Windows 系统中找不到它。

大多数广泛使用且可移植的库应该提供替代版本或检测平台并仅尝试使用将被提供的头文件/函数,因此值得检查文档以查看是否忽略了某些构建步骤 - 例如,可能需要运行"make"而不是加载".sln" Visual C++解决方案文件。

如果您需要自己修复,请删除该包含文件并查看实际所需的功能,然后尝试找到 Windows 等效项。


非常感谢您的回复,我最终按照这个建议进行了操作。 - user3471387
哦 - 很好的发现 - GNU、Cygwin和其他一些提供在Windows上近似UNIX环境的工具。微软的Visual C++编译器和操作系统本身似乎刻意避免...(例如缺少posix线程、Winsock / BSD不兼容、缺少int8_t等头文件)。 - Tony Delroy
3
包含“int8_t”和类似类型的头文件是从Visual Studio 2010开始包含的,当时微软终于添加了对“<stdint.h>”的支持。 - WhozCraig

30

如果你正在项目中使用ZLib,那么你需要找到:

#if 1

在zconf.h中找到并替换(取消注释)为:

#if HAVE_UNISTD_H /* ...the rest of the line

如果不是ZLib,我猜你应该找一些替代方法来做这个。祝好运。


嗨,我知道这是一个相当老的问题,但如果您能帮助我,我会很高兴。我正在尝试构建LibRaw,它依赖于Zlib和Jasper。当我不使用jasper(它是可选的),即不定义USE_JASPER时,一切都构建正确,但是使用jasper时,我遇到了与提问者相同的错误。所以我不知道这个定义发生在哪里,是否有一种全局的方法来禁用它? - Vahagn Tumanyan

0

从您的项目目录更改C++标准为C++17,因为在VS中不需要使用C++17标准中的unistd.h。


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