gpt4 book ai didi

c - 如何在 Darwin 下启用大文件支持?

转载 作者:IT王子 更新时间:2023-10-29 00:11:22 26 4
gpt4 key购买 nike

我有一个 C 应用程序,我正在尝试为 Mac OS X 10.6.4 编译:

$ uname -v
Darwin Kernel Version 10.4.0: Fri Apr 23 18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386

我的gcc如下:

$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)

我的Makefile如下:

CC=gcc
CFLAGS=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -O3 -Wformat -Wall -pedantic -std=gnu99

all: myApp
rm -rf *~

myApp: myApp.o
${CC} ${CFLAGS} myApp.o -lbz2 -o myApp
rm -rf *~

clean:
rm -rf *.o myApp

问题是我的应用程序调用了 fseeko64fopen64,并使用 off64_t 类型作为偏移量。当我编译我的应用程序时,我收到以下警告和错误:

$ make myApp
gcc -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -O3 -Wformat -Wall -pedantic -std=gnu99 -c -o myApp.o myApp.c
myApp.c: In function ‘extractData’:
myApp.c:119: warning: implicit declaration of function ‘fseeko64’
myApp.c:119: error: ‘off64_t’ undeclared (first use in this function)
myApp.c:119: error: (Each undeclared identifier is reported only once
myApp.c:119: error: for each function it appears in.)
myApp.c: In function ‘extractMetadata’:
myApp.c:305: warning: implicit declaration of function ‘fopen64’
myApp.c:305: warning: assignment makes pointer from integer without a cast

我的代码在 Linux 下构建时没有错误。在 Darwin 下构建时,我可以对源代码进行哪些更改以添加大文件支持?

最佳答案

在 Darwin 上,文件 I/O 默认是 64 位的(至少 10.5),只是通过在/usr/include 中 grepping 发现的:

sys/_types.h:typedef __int64_t  __darwin_off_t;

unistd.h:typedef __darwin_off_t off_t;

所以你需要做的就是像

#ifdef __APPLE__
# define off64_t off_t
# define fopen64 fopen
...
#endif

关于c - 如何在 Darwin 下启用大文件支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4003479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com