正如标题所说,我正在尝试找到一种方法来在使用自动工具的项目上启用大文件支持。我AC_SYS_LARGEFILE
在 configure.ac 文件上使用宏,它在 64 位 Linux(默认情况下)和 32 位 Linux 上运行良好。现在我移植了该项目,因此它可以使用 mingw 在 Windows(32 位)上编译,但遗憾的是AC_SYS_LARGEFILE
它不起作用(例如,off_t 是 4 个字节,而在 Linux 上是 8 个 32 位和 64 位,并且 fopen/fstat 没有被替换通过 fopen64/fstat64)。
这是一个测试用例,我可以在其中重现其中一个问题(off_t 为 4 个字节):
配置.ac
AC_INIT([testcase], [1.0.0], [admin@example.com])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
# Support for large files in 32bit systems
AC_SYS_LARGEFILE
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
生成文件.am
ACLOCAL_AMFLAGS=-I m4
bin_PROGRAMS=testcase
testcase_SOURCES=testcase.c
testcase_CFLAGS= -std=gnu99 -O2
测试用例.c
#include "config.h"
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("sizeof off_t: %i bytes\n", sizeof(off_t));
return 0;
}
编译/运行测试用例我使用以下:
mkdir m4
autoreconf --install
./configure
make
./testcase
64 位 Linux 上的输出(使用 gcc/autotools)
sizeof off_t: 8 bytes
32 位 Linux 上的输出(使用 gcc/autotools)
sizeof off_t: 8 bytes
Windows 7 32 位上的输出(使用 mingw-get 准备环境):
sizeof off_t: 4 bytes
关于我可以在配置脚本中添加/修改什么以便我可以在两个平台上获得大文件支持的任何想法?这可以使用 mingw/autotools 吗?