我正在尝试维护可以在许多不同系统上编译的代码。我见过十几种不同的方式来请求64位的lseek。有些系统使用lseek64,有些系统使用lseeko,有些系统要求您定义_FILE_OFFSET_BITS=64,现在我又发现了一个新系统,它要求您定义__USE_FILE_OFFSET64。
这一切有什么标准吗?
发布于 2011-07-31 16:14:51
有getconf values in IEEE Std 1003.1-2004 (以及IEEE Std 1003.1-2008中的一个较新的集合;另请参阅这些文档中的示例部分)。没有指定实际的编译器选项(甚至可能没有定义)。
然而,autoconf中的AC_SYS_LARGEFILE宏并没有尝试使用这个选项--它只针对IRIX、-D_FILE_OFFSET_BITS=64 (应该适用于大多数系统)和-D_LARGE_FILES=1 (显然适用于AIX)使用-n32。在autoconf源代码中也有对Adding Support for Arbitrary File Sizes to the Single UNIX Specification (一个较旧的规范草案,然后部分包含在POSIX.1规范中)的引用。
至于手动定义__USE_FILE_OFFSET64,我不确定这是否真的是一个正确的解决方案--双下划线宏是为系统头保留的,而且很可能有一些条件定义依赖于其他定义。
发布于 2014-10-06 19:54:02
在features.h中,您可以看到_FILE_OFFSET_BITS和__USE_FILE_OFFSET64之间的关系。
#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
# define __USE_FILE_OFFSET64 1
#endif因此,只有_FILE_OFFSET_BITS是为用户设计的。
https://stackoverflow.com/questions/4357570
复制相似问题