使用未定义的struct compile错误 - C.

时间:2009-04-27 19:06:35

标签: c windows mongoose-web-server

编译器不知道stat.h在哪里?

错误: c:\ Projects \ ADC_HCI \ mongoose.c(745):错误C2079:'st'使用未定义的struct'_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);
}  

...直接从source下载文件。

4 个答案:

答案 0 :(得分:3)

请参阅MSDN_wstat64的参数为struct __stat64两个下划线)。将变量st重新声明为struct __stat64类型。

答案 1 :(得分:2)

请注意,_stat64__stat64在任何标准(如POSIX)记录的意义上都不是“标准”。您通常会使用struct stat;如果您担心这是否适用于大文件(超过2 GiB),那么请检查平台上需要哪些编译选项以获得“大文件支持”。对于64位计算机和64位编译(不一定是Windows 64),您通常不必担心。您通常可以使用以下方式获得大文件支持:

-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE

这些至少是半标准化的。 autoconf等系统会自动检测这些内容(如果您要求他们这样做)。

答案 2 :(得分:1)

将_stat64更改为stat64。至少在我的Linux机器中,这是结构的名称。我不知道它在Windows中是否有所不同。

答案 3 :(得分:1)

我建议您同步到SVN中继。

如果您没有SVN客户端,只需下载两个文件: http://mongoose.googlecode.com/svn/trunk/mongoose.h(和.c文件)

原因是最近代码被重构,并且CRT _stat函数被替换 使用WinAPI,GetFileAttributesExW()。