我正在尝试维护在许多不同系统上编译的代码。我已经看到了十几种不同的方式要求lseek
需要64位。有些系统使用lseek64
,有些系统使用lseeko
,有些需要您定义_FILE_OFFSET_BITS=64
,现在我找到了一个需要定义__USE_FILE_OFFSET64
的新系统。
所有这些都有标准吗?
答案 0 :(得分:14)
有getconf values in IEEE Std 1003.1-2004(以及IEEE Std 1003.1-2008中的较新设置;另请参阅这些文档中的示例部分)。未指定实际的编译器选项(可能甚至不定义)。
但是,autoconf中的AC_SYS_LARGEFILE
宏不会尝试使用此功能 - 它仅针对IRIX尝试-n32
,-D_FILE_OFFSET_BITS=64
(适用于大多数系统)和{{1} (显然是为了AIX)。在autoconf源中还引用了Adding Support for Arbitrary File Sizes to the Single UNIX Specification(旧的规范草案,然后部分包含在POSIX.1规范中)。
至于手动定义-D_LARGE_FILES=1
,不确定这是否真的是一个正确的解决方案 - 为系统头保留双下划线宏,并且很可能在那里有一些依赖于其他定义的条件定义。
答案 1 :(得分:6)
在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
适用于用户。