Question

J'ai une application C Je suis en train de compiler pour 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

Mon gcc est la suivante:

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

Mon Makefile est la suivante:

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

Le problème est que mon application fait appel à fseeko64 et fopen64, et utilise le type de off64_t pour les compensations. Quand je compile ma demande, je reçois les avertissements et les erreurs suivantes:

$ 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

Mon code construit sans erreurs sous Linux. Quels sont les changements que je peux apporter au code source pour ajouter un large soutien de fichiers lors de la construction sous Darwin?

Était-ce utile?

La solution

Darwin fichier E / S est de 64 bits par défaut (10,5 au moins), vient de trouver cela en grepper dans / usr / include:

sys/_types.h:typedef __int64_t  __darwin_off_t;

unistd.h:typedef __darwin_off_t     off_t;

Donc tout ce que vous devez faire est quelque chose comme

#ifdef __APPLE__
#  define off64_t off_t
#  define fopen64 fopen
...
#endif
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top