【问题标题】:error: unknown type name 'u_char' in OSX 10.11.2错误:OSX 10.11.2 中的未知类型名称“u_char”
【发布时间】:2015-12-11 18:10:33
【问题描述】:

我是 osx 的新手,我遇到了一些问题。我尝试 makefile 但想出了: error: unknown type name 'u_char'; did you mean 'char'?

我提到了C PCAP library unknown types error,将-D_BSD_SOURCE CFLAGS 添加到我的makefile,但这没有帮助。我错过了什么?

编辑:

这是产生错误的代码:

char *computePwd(const u_char *md5) {
    static char buf[16];
    unsigned char tmp[40];
    int tmpl=0;
    tmpl = strlen(userName);
    strcpy((char*)tmp, userName);
    memcpy(tmp + tmpl, md5, 16);
    tmpl += 16;
    memcpy(buf, ComputeHash(tmp, tmpl), 16);
    memset(tmp, 0, 16);
    strcpy((char*)tmp, password);
    int i;
    for (i=0; i<16; ++i)
        buf[i] ^= tmp[i];
    return buf;
}

【问题讨论】:

  • 你能贴出产生错误的代码吗?
  • char *computePwd(const u_char *md5) { static char buf[16]; unsigned char tmp[40]; int tmpl=0; tmpl = strlen(userName); strcpy((char*)tmp, userName); memcpy(tmp + tmpl, md5, 16); tmpl += 16; memcpy(buf, ComputeHash(tmp, tmpl), 16); memset(tmp, 0, 16); strcpy((char*)tmp, password); int i; for (i=0; i&lt;16; ++i) buf[i] ^= tmp[i]; return buf; }@zvone

标签: c makefile gnu-make


【解决方案1】:

-Du_char="unsigned char" 添加到CFLAGS 或仅修复源。使用 u_char 作为 unsigned char 的惰性简写是遗留 BSD 代码库中的常见做法,其中系统头文件历史上暴露了这样的 typedef。它不应该在现代代码中使用。

【讨论】:

  • 如果可能,最好从源头修复该错误。 OP 没有说明它出现在哪里,所以应该先选择这个选项。
  • @Olaf:哪个更好取决于 OP 在做什么。对于在新软件中重用现有代码或主动移植现有软件,修复它当然是更可取的。但是对于在现代平台上以最少的工作量和维护工作部署现有的遗留软件/库,将-D's 添加到CFLAGS 可能是最合理的方法。
  • 那是我的想法。只是要补充一点,-D 定义了一个宏,它是一个文本替换,而不是 typedef 或类似的。宏可能有意想不到的副作用,因为它们不关心正常的 C 语法。
  • @R.. 我将所有的 u_char 更改为 unsigned char 并且它有效!谢谢!
【解决方案2】:

或者你可以添加

#ifdef __APPLE__
#include <sys/types.h>
#endif

这为我解决了同样的问题。

它包含u_char 的定义。

typedef unsigned char   u_char;

【讨论】:

  • 没什么意外,但值得一提的是:包含 sys/types.h 在 FreeBSD 上解决了同样的问题。
【解决方案3】:

添加-D_DARWIN_C_SOURCE,它应该可以工作。

【讨论】:

    猜你喜欢
    • 2012-02-20
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多