【问题标题】:uses undefined struct compile error - C使用未定义的结构编译错误 - C
【发布时间】:2009-04-27 19:06:34
【问题描述】:

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

错误: c:\Projects\ADC_HCI\mongoose.c(745) : 错误 C2079: 'st' 使用未定义的结构 '_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 下载文件。

【问题讨论】:

  • groups.google.com/group/mongoose-users/topics 的 mongoose 支持小组中询问它 - 维护者非常有帮助。
  • 是的,我也刚问过群里的......
  • 我刚刚看了你的帖子——你在用什么样的VS项目? IIRC,您需要将其构建为多线程控制台应用程序。
  • 我现在正在编译为 /MT,因为我需要它,但是仍然有错误。
  • 有人指出 stat.h 中的 _stat64 是双下划线......

标签: c windows mongoose-web-server


【解决方案1】:

参见MSDN_wstat64 采用struct __stat64 的参数(带有两个 下划线)。将变量 st 重新声明为 struct __stat64 类型。

【讨论】:

    【解决方案2】:

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

    -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
    

    这些至少是半标准化的。诸如autoconf 之类的系统会自动检测这些事情(如果您要求他们这样做)。

    【讨论】:

      【解决方案3】:

      将 _stat64 更改为 stat64。至少在我的 Linux 机器中,这是结构的名称。不知道在windows下是不是不一样。

      【讨论】:

        【解决方案4】:

        我建议你同步到 SVN 中继。

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

        原因是最近代码重构了,替换了CRT _stat函数 使用 WinAPI 之一,GetFileAttributesExW()。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-20
          • 1970-01-01
          • 2020-04-02
          • 2011-07-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多