我正在尝试编译一个共享对象(最终在 Python 中与 ctypes 一起使用)。用于构建对象的命令行是:
gcc -Wall -O3 -shared -Wl,-soname,borg_stream -lm -m128bit-long-double -fPIC \
-D_FILE_OFFSET_BITS=64 -o borg_stream.so data_stream.c data_types.c \
file_operations.c float_half.c channels.c statistics.c index_stream.c helpers.c
该库在 32 位操作系统上正确构建,它可以满足小文件的需要。但是,对于大于 4GB 的文件,它无法通过单元测试。此外,它在执行 fseek/ftell 时将 errno 设置为 EOVERFLOW。但是,如果我 printf sizeof(off_t),它会返回 8。如果我删除-D_FILE_OFFSET_BITS=64
,那么它会打印 4。所以它似乎-D_FILE_OFFSET_BITS
正在正确地完成它的工作。
为什么大文件支持仍然不起作用?我究竟做错了什么?