2009-04-27 16 views
1

Der Compiler weiß nicht, wo stat.h ist?verwendet undefinierten Strukturkompilierungsfehler - C

Fehler: c: \ Projects \ ADC_HCI \ mongoose.c (745): Fehler C2079: 'st' verwendet undefinierte Struktur '_stat64'

#include <sys/types.h> 
#include <sys/stat.h> 

static int 
mg_stat(const char *path, struct mgstat *stp) 
{ 
    struct _stat64 st; //<-- ERROR 

    int  ok; 
    wchar_t  wbuf[FILENAME_MAX]; 

    to_unicode(path, wbuf, ARRAY_SIZE(wbuf)); 
    if (_wstat64(wbuf, &st) == 0) { 
     ok = 0; 
     stp->size = st.st_size; 
     stp->mtime = st.st_mtime; 
     stp->is_directory = S_ISDIR(st.st_mode); 
    } else { 
     ok = -1; 
    } 

    return (ok); 
} 

... heruntergeladen die Dateien direkt aus dem source .

+1

Fragen Sie bei der Mongoose-Supportgruppe unter http://groups.google.com/group/mongoose-users/topics nach - der Betreuer ist sehr hilfreich. –

+0

Ja, ich habe die Gruppe auch gefragt ... –

+1

Ich habe mir gerade Ihren Beitrag angesehen - welche Art von VS-Projekt benutzen Sie? IIRC, müssen Sie es als eine Multithread-Konsole-Anwendung erstellen. –

Antwort

3

Siehe MSDN: _wstat64 nimmt einen Parameter struct __stat64 (mit zwei Unterstrichen). Melden Sie Ihre Variable st als struct __stat64 an.

1

Ändern Sie _stat64 in stat64. Zumindest bei meinen Linux-Rechnern heißt das die Struktur. Ich weiß nicht, ob es in Windows anders ist.

2

Beachten Sie, dass weder _stat64 noch __stat64 "Standard" im Sinne von jedem Standard wie POSIX dokumentiert ist. Normalerweise würden Sie struct stat verwenden; Wenn Sie sich Sorgen machen, ob das mit großen Dateien (über 2 GiB) funktioniert, dann prüfen Sie, welche Kompilierungsoptionen auf Ihrer Plattform benötigt werden, um "große Dateiunterstützung" zu erhalten. Für 64-Bit-Computer und 64-Bit-Compilations (nicht unbedingt Windows 64) müssen Sie sich normalerweise keine Sorgen machen. Sie können oft große Dateiunterstützung erhalten mit:

-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE 

Diese sind mindestens semi-standardisiert. Systeme wie autoconf erkennen diese Dinge automatisch (wenn Sie sie dazu auffordern).

1

Ich empfehle Ihnen, mit SVN Trunk zu synchronisieren.

Wenn Sie nicht SVN-Client haben, laden Sie einfach zwei Dateien: http://mongoose.googlecode.com/svn/trunk/mongoose.h (und C-Datei auch)

Der Grund dafür ist, dass vor kurzem der Code Refactoring wurde, und CRT _STAT Funktion wurde mit WinAPI ersetzt ein, GetFileAttributesExW().

Verwandte Themen